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

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

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

答え2

解決策

sed -i '1 i\use my_db' backup/*.sql

説明する

sed -iファイルの変更を保持して書き込まないでくださいstdout

1-sed最初の行にあるとき。

i- 次の行を挿入してください。

backup/*.sql実行するファイルですsed

答え3

フォルダ内の各ファイルを繰り返すことができます。

for item in $(ls backup/ | grep "*.sql")
do
echo "use my_db;" >> $item
done

関連情報