Text-Processing

刪除文件的前 n 個字節

  • August 30, 2020

我有一個極端的問題,我能想像到的所有解決方案都很複雜。根據我的 UNIX/Linux 經驗,一定有一個簡單的方法。

我想刪除/foo/. 每個文件都足夠長。好吧,我相信有人會為我提供一個我無法想像的非常簡單的解決方案。也許是 awk?

for file in /foo/*
do
 if [ -f "$file" ]
 then
   dd if="$file" of="$file.truncated" bs=31 skip=1 && mv "$file.truncated" "$file"
 fi
done

或者更快,感謝 Gilles 的建議:

for file in /foo/*
   do
     if [ -f $file ]
     then
       tail +32c $file > $file.truncated && mv $file.truncated $file
     fi
   done

注意:Posix tail 指定“-c +32”而不是“+32c”,但 Solaris 預設 tail 不喜歡它:

  $ /usr/bin/tail -c +32 /tmp/foo > /tmp/foo1
   tail: cannot open input

/usr/xpg4/bin/tail兩種語法都很好。

如果要保留原始文件權限,請替換

... && mv "$file.truncated" "$file"

經過

... && cat "$file.truncated" "$file" && rm "$file.truncated"

引用自:https://unix.stackexchange.com/questions/13907