複数のファイルに行を追加する

複数のファイルに行を追加する

200,000を超えるファイルにテキストを追加したいです。今しようとしています。

find . -name *.txt -print | xargs -I % echo "hello world" >> %

しかし、何も起こりませんでした。実行するとfind . -name *.txt自然になりました。echo "hello world" >> myfile.txt

答え1

シェルは見る>> %前に部品をxargs拡張しています。

シェルリダイレクトを実行する必要がある場合は、次のことを試してください。

find . -name "*.txt" -exec sh -c '
    echo "hello world" >> "$0"
    ' {} \;

仕組み:

  1. find{}一致するすべてのファイルに置き換える
  2. bash -c "some command" arg0...$0...スクリプト内で設定"some command"

sed>>または、たとえば、依存しないコマンドを使用できます。

find . -name "*.txt" -exec sed -i -e '$a\
hello world' {} \;

引用:

答え2

試した元のコマンドは...

find . -name *.txt -print | xargs -I % echo "hello world" >> %

に変更する必要があります。

find . -name "*.txt" | xargs -I {} sh -c "echo 'hello world' >> '{}' "

答え3

GNU Parallelでは、次のことができます。

find . -name *.txt -print | parallel 'echo "hello world" >> {}'

次のように簡単にGNU Parallelをインストールできます。

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

GNU Parallel紹介ビデオを見る詳細

関連情報