Что-то вроде (сначала резервное копирование)):
for i in $(ls *.sql)
do
cp "$i" "$i.temp"
printf '\xFF\xFE' > "$i"
cat "$i.temp" >> "$i"
rm "$i.temp"
done
Ответ Мэтью Флашена хороший, однако в нем есть несколько недостатков.
ls
не нужен. Конечно, вы можете быть очень параноиком и проверить наличие временного файла в начале, чтобы случайно не перезаписать его и / или используйте UUID или сгенерированное имя файла. Один из mktemp, tempfile или uuidgen подойдет.
Для решения общего назначения - что-то, что устанавливает правильную метку порядка байтов независимо от того, является ли файл UTF-8, UTF-16 или UTF-32 - я бы использовал vim's параметр «бомба»
:
$ echo 'hello' > foo
$ xxd < foo
0000000: 6865 6c6c 6f0a hello.
$ vim -e -s -c ':set bomb' -c ':wq' foo
$ xxd < foo
0000000: efbb bf68 656c 6c6f 0a ...hello.
( -e
означает работу в ex-режиме вместо визуального; -s
означает не печатать сообщения о состоянии; -c
означает «сделать это»)