tail -c +32
выводит свой ввод минус первые 31 байт. (Да, аргумент отключен на единицу.) Чтобы отредактировать файл на месте, используйте губку в цикле, или, если у вас его нет и вы не хотите беспокоиться, выполните его работу в оболочке:
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
Если файлы действительно велики (например, достаточно велики, чтобы иметь две копии даже одной - это проблема), вы можете использовать один из методов, упомянутых в этой теме .