私はこれが仕事に近づくと思う
find /mydirectory -name '*' | xargs echo abc >
しかし、私は得ました:
find: paths must precede expression: b
少し助けが必要です:)ありがとう
私はこれが仕事に近づくと思う
find /mydirectory -name '*' | xargs echo abc >
しかし、私は得ました:
find: paths must precede expression: b
少し助けが必要です:)ありがとう
これを試して
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
これを bash で試してください:
for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done
これを行うには、いくつかのファイル名を引数として取り、それらに対してエコーを実行する別のスクリプトを作成します。次に、echo を使用する代わりに、このスクリプトを xargs で呼び出します。-type fに追加しfindて、ディレクトリを省略することもできます。