たとえば、というディレクトリ階層abc
とテキストファイルがありますnames.txt
。テキストファイルから数行を選択し、各サブディレクトリにサンプルテキストを含む新しいファイルを作成する必要があります。たとえば、abc
選択した各行names.txt
は次のようになります。新しいファイルの1つの名前。xargs
orを使用して1行でこれを行う必要があります-exec
。次のように試しましたが、うまくいかないようです。
find abc -type d -exec sh -c 'grep ^'A' names.txt | xargs -I% sh -c 'echo 'Hello world' | tee {}/%'' \;
これを正しい方法で行う方法は?
答え1
ディレクトリに必要なものから始めましょう。
awk '/^A/ { print "Hello world" >$0 }' names.txt
入力行が大文字で始まる場合は、呼び出されたファイルを読み取り、names.txt
そのファイルの完全な入力行によって提供される各ファイル名に文字列を書き込みます。Hello world
A
わずかに変更するだけで、特定のディレクトリのファイルに出力することができます$dirname
。
awk -v dir="$dirname" '/^A/ { print "Hello world" >(dir "/" $0) }' names.txt
find
その後、すべてのサブディレクトリ(起動ディレクトリを含む)に対してそれを呼び出すことができます。
find abc -type d -exec awk -v dir={} '/^A/ { print "Hello world" >(dir "/" $0) }' names.txt \;