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"
' {} \;
仕組み:
find
{}
一致するすべてのファイルに置き換える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紹介ビデオを見る詳細。