各行の末尾にファイル名を追加する方法 - すべてのサブディレクトリ内のすべてのファイル

各行の末尾にファイル名を追加する方法 - すべてのサブディレクトリ内のすべてのファイル

ファイルのすべての行の末尾にファイル名を追加するbashスクリプト(ubuntu 16)に行を追加したいと思います。つまり、フォルダ内のすべてのファイルとすべてのサブフォルダ内のすべてのファイルです。

ファイル名は、英数字や-_などの一部の特殊文字です。

たとえば、

ファイルのfilename_ghrut.txt前の行は次のとおりです。

blah blah blah
blahblah blahblah

ファイルの行の後ろfilename_ghrut.txt

blah blah blah filename_ghrut.txt
blahblah blahblah filename_ghrut.txt

検索しましたが、ほとんどのコマンドが機能していないようです。

特定のディレクトリのすべてのサブフォルダにあるすべてのファイルに対してこのタスクを実行したいと思います。

とても感謝しています。

これを見つけましたが、うまくいきません。

ls file{1..5}.txt|xargs -I% sed -i 's/$/;%/' %

ベストアンサー1

そしてperlfind

find . -type f -exec perl -i -pe 's/$/ $ARGV/' {} +
  • s/$/ $ARGV/各行の末尾にスペースとファイル名を追加します。
  • -i内部編集の場合は、i.bkp元のファイルのバックアップを保持するには、次のようにします。
  • findサポートしていない場合は、代わりに使用し+てください\;
  • find . -type f現在のディレクトリのすべてのファイルのリストを提供します
  • -exec次のコマンドを使用して、これらすべてのファイルに対する操作を許可します。
  • find . -type f -name '*.txt'次に終わるファイルを制限したい場合.txt


上記の解決策がファイル名などを./file.txt追加することを指摘した@thiagowfxに感謝します。./foo/file2.txt

./などを追加せずにファイル名のみを追加するには、このオプションを使用します。

find . -type f -exec perl -i -pe 's/$/$ARGV=~s|.*\/| |r/e' {} +
  • $ARGV=~s|.*\/| |r/すべての文字が削除されたファイル名を指定します。

おすすめ記事