特定のファイル名を持つすべてのファイルを(再帰的に)テキストで埋める必要があります。zshでは次のように実行できます。
echo SomeText > **/TheFileName
sh 互換シェルや tcsh シェルの一般的なソリューションを探しています。次のコマンドよりも短い/簡単な方法はありますか?
find . -name "TheFileName" -print0 | xargs -0 sed -n -i -e '1c\nSomeText'
答え1
find . -name TheFileName -type f -exec sh -c 'for i do
echo SomeText > "$i"; done' sh {} +
答え2
これには以下を使用できますtee
:
シェルが に適切に一致し**/TheFileName
、問題が各ファイルの内容を取得するだけである場合:
echo SomeText | tee **/TheFileName >/dev/null
問題が**/TheFileName
適切に一致しない場合は、次を使用できますfind
。
echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null
find
がない場合は-exec +
、ここにある他の解決策が適切です。
ファイル数が非常に多い場合( を超える場合getconf ARG_MAX
)も、これらは機能しません。
答え3
少し短く:
find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +