他のシェルでの zsh の「echo SomeText >> **/filename」

他のシェルでの zsh の「echo SomeText >> **/filename」

特定のファイル名を持つすべてのファイルを(再帰的に)テキストで埋める必要があります。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' {} +

関連情報