backup
というディレクトリにファイル拡張子*.sql
を付けています。私がやりたいことは、ディレクトリbackup
内のすべてのSQLファイルに行を追加することです。
echo 'use my_db;' >> backup/*.sql
を行いましたが、うまくいきませんでした。
私は以下を試しましたが、次に何をすべきかわかりません:
ls backup/*.sql | xargs echo "use my_db;"
その行を追加する解決策はありますか?
GNU sed
を使用:
for sql in backup/*.sql; do
sed -i '1i\use my_db;' "$sql"
done
標準のsed
を使用:
for sql in backup/*.sql; do
sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done
これにより、backup
内の各.sql
ファイルのインプレース編集が行われます。編集コマンドは、各ファイルの最初の行の前に行を挿入します。
これは、パターンbackup/*.sql
が編集するファイルにのみ一致することを前提としています。
echo
およびcat
の使用:
for sql in backup/*.sql; do
{ echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done
このループでは、最初にファイルに付加する行を出力し、次にファイルの内容を出力します。これは一時ファイルに入り、一時ファイルに名前が変更されます。
コマンド
echo 'use my_db;' >> backup/*.sql
のようなものに拡大します
echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql
それは同じです
echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql
与えられた文字列をbackup/file1.sql
に追加します。
2番目のコマンドはファイルを変更しません。
sed -i '1 i\use my_db' backup/*.sql
sed -i
変更をファイルに保存し、stdout
に書き込まないでください。
1
-sed
が最初の行にある場合。
i
-次の行を挿入します。
backup/*.sql
sed
が実行するファイル。