ディレクトリ内のすべてのファイルの前に行を追加するには?

ディレクトリ内のすべてのファイルの前に行を追加するには?

backupファイル拡張子というディレクトリがあります*.sql。私が望むのは、ディレクトリ内のすべてのSQLファイルの前に1行を追加することですbackup

そうしましたが、echo 'use my_db;' >> backup/*.sql成功しませんでした。

次のことを試しましたが、次に何をすべきかわかりません。

ls backup/*.sql | xargs echo "use my_db;"

その行を前に追加するソリューションはありますか?

ベストアンサー1

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

.sqlこれにより、その中にあるすべてのファイルをすぐに編集できますbackup。編集コマンドは、各ファイルの最初の行の前に1行を挿入します。

これは、パターンがbackup/*.sql編集したいファイルとのみ一致すると仮定します。


使用echocat:

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番目のコマンドはファイルを変更しません。

おすすめ記事