
ディレクトリには多くのテキスト(何百ものtxt)があります。それぞれに固有のファイル名があります。各ファイルの最初の行に各ファイルのファイル名を挿入したいと思います。 Bashスクリプトを使用してこれをどのように実行できますか?
答え1
標準的なアプローチは一時ファイルを使用することですが、ファイルを括弧cat
で囲むと、その場所でファイルを変更できます$()
。
for file in *.txt; do echo "$file"$'\n'"$(cat -- "$file")" > "$file"; done
答え2
標準のテキストエディタを使用できます。
for f in *; do printf '%s\n' 1i "$f" . w q | ed "$f"; done
答え3
for file in *; do
(echo "$file"; cat -- "$file") > "$file.new"
mv -- "$file.new" "$file"
done
このループは、すべてのファイルを繰り返して各ファイル名をエコーし、ファイルの内容を追加し、追加されたサフィックスを使用してすべて入れます.new
。
既存のファイルごとに新しいファイルを作成するので、後でファイルの名前を変更する必要があります。
結果を新しいディレクトリに入れてから、古いディレクトリを削除できます。
mkdir new
for file in *; do
(echo "$file"; cat "$file") > "new/$file"
done
-i
ファイルを適切に編集するオプションと一緒にsedを使用することもできます。 Perlもこれを許可します。それはすべて利用可能な他のツールによって異なります。 :)