他のシェルの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

find1つもない場合は、ここの-exec +他のソリューションが適しています。

ファイル数が多い場合(より大きい場合getconf ARG_MAX)でも機能しません。

答え3

やや短い:

find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +

関連情報