Text-Processing
刪除文件的前 n 個字節
我有一個極端的問題,我能想像到的所有解決方案都很複雜。根據我的 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"