Usando o GNU sed
:
for sql in backup/*.sql; do
sed -i '1i\use my_db;' "$sql"
done
Com o padrão sed
:
for sql in backup/*.sql; do
sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done
Isso faria uma edição no local de cada arquivo .sql
em backup
. O comando de edição insere uma linha antes da primeira linha em cada arquivo.
Isso pressupõe que o padrão backup/*.sql
corresponda apenas aos arquivos que você deseja editar.
Usando echo
e cat
:
for sql in backup/*.sql; do
{ echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done
Nesse loop, primeiro exibimos a linha que gostaríamos de preceder no arquivo e, em seguida, o conteúdo do arquivo. Isso vai para um arquivo temporário que é renomeado.
O comando
echo 'use my_db;' >> backup/*.sql
se expandiria para algo como
echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql
que é o mesmo que
echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql
que acrescentaria as strings dadas a backup/file1.sql
.
Seu segundo comando não modifica nenhum arquivo.