私は深刻な問題に直面しており、私が考えることができる解決策はすべて複雑です。私のUNIX / Linux経験に基づいて〜しなければならない簡単な方法です。
各.txtファイルの最初の31バイトを削除したいと思います/foo/
。各ファイルの長さは十分です。まあ、誰かが私が想像できない非常に簡単な解決策を提示すると確信しています。たぶんちょっと?
ベストアンサー1
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
またはギルスの提案に感謝します。
for file in /foo/*
do
if [ -f $file ]
then
tail +32c $file > $file.truncated && mv $file.truncated $file
fi
done
注: Posix tail は "+32c" の代わりに "-c +32" を指定しますが、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"