質問: ファイルの最初のnバイトを削除する 私は極端な問題を抱えており、想像できるすべての解決策は複雑です。私のunix/linuxの経験によるとmustは簡単な方法です。/foo/の各ファイルの最初の31バイトを削除したい。各ファイルは十分に長いです。まあ、私が想像もできない驚くほど簡単なソリューションを誰かが私に届けてくれると確信しています。多分awk?
回答: tail -c +32は、その入力から最初の31バイトを引いた値を出力します。 (はい、引数は1ずつずれています。)ファイルをその場で編集するには、ループで se sponge を使用します。または、ファイルがなく、気になりたくない場合は、そのジョブを実行します。シェルで:for x in /foo/*; do tail -c +32 "$x" | sponge "$x"; done for x in /foo/*; do tail -c +32 "$x" >"$x.new" && mv "$x.new" "$x"; done なんらかの理由(停電など)でコマンドが中断された場合、中断した場所を特定するのが難しい場合があります。新しいファイルを別のディレクトリに書き込むと、状況が簡単になります。mkdir /foo.tmp cd /foo for x in *; do tail -c +42 -- "$x" >"/foo.tmp/$x" && rm -- "$x"; done mv /foo.tmp/* /foo rmdir /foo.tmp ファイルが本当に大きい場合(たとえば、1つのコピーでも2つのコピーがあることが問題になるほど大きい場合)、 このスレッドで言及されている手法の1つ を使用できます。