0

私はこれが仕事に近づくと思う

find /mydirectory -name '*'  | xargs echo abc >

しかし、私は得ました:

find: paths must precede expression: b

少し助けが必要です:)ありがとう

4

3 に答える 3

3

これを試して

find . -type f -exec sh -c 'echo "abc" >> ${1}' _ "{}" \;

または、一括で実行する場合:

find . -type f -exec sh -c 'for f; do echo "abc" >> $f; done' _ "{}" +

説明が必要な場合は、お尋ねください。

このページは、find の使用方法に関する優れたガイドです。

どちらのコマンドでも、_{}が引数としてコマンドに渡されますsh。$0 の使用は完全に信頼できるものではないため (リンク先のページを参照)、ダミー変数_が渡されます。

Find はその一致を{}展開された に入れます。したがって、コマンドが fileaに一致する場合、最初のコマンドで {}展開されます。a

最初のコマンドでは、exec に渡すコマンドは で終了しますが;;シェルにとっては特別なので、エスケープします。

a2 番目のコマンドは一括操作として実行されるため、find が、b、およびc(など)と一致する場合、{}は 3 つすべてに展開されて渡されます。

したがって、2 番目のコマンドには a が必要ですfor f。デフォルトはで、これは、、および にfor f in $@なります(これは、${1}、${2}、${3}... を実行することでテストできます)。abc

于 2012-08-15T20:04:34.537 に答える
0

これを bash で試してください:

for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done
于 2012-08-15T22:27:36.613 に答える
0

これを行うには、いくつかのファイル名を引数として取り、それらに対してエコーを実行する別のスクリプトを作成します。次に、echo を使用する代わりに、このスクリプトを xargs で呼び出します。-type fに追加しfindて、ディレクトリを省略することもできます。

于 2012-08-15T19:51:11.043 に答える