私はこれが仕事に近づくと思う
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 に渡すコマンドは で終了しますが;
、;
シェルにとっては特別なので、エスケープします。
a
2 番目のコマンドは一括操作として実行されるため、find が、b
、およびc
(など)と一致する場合、{}
は 3 つすべてに展開されて渡されます。
したがって、2 番目のコマンドには a が必要ですfor f
。デフォルトはで、これは、、および にfor f in $@
なります(これは、${1}、${2}、${3}... を実行することでテストできます)。a
b
c
これを bash で試してください:
for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done
これを行うには、いくつかのファイル名を引数として取り、それらに対してエコーを実行する別のスクリプトを作成します。次に、echo を使用する代わりに、このスクリプトを xargs で呼び出します。-type f
に追加しfind
て、ディレクトリを省略することもできます。