web-dev-qa-db-ja.com

OSXのxargs:不正なオプション-

私はOSXを使っています。特定のディレクトリ内のすべてのpngに対してpythonスクリプトを実行したいのですが、これは私が試したものです:

find docs/ -name "*png" | xargs --replace=F python myscript.py "F"

しかし私はこれを見ます:

xargs: illegal option -- -
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
             [-L number] [-n number [-x]] [-P maxprocs] [-s size]
             [utility [argument ...]]

何が悪いのですか?

7
Richard

xargs on Mac OS X--replaceオプションをサポートしていません。代わりに-Iを使用できます。

find docs/ -name "*png" | xargs -I F python myscript.py "F"

このバージョンのxargsは、単一の-の後の文字をオプションとして解釈するため、奇妙なエラーメッセージが生成されます。したがって、--replaceでは、存在しない-という名前のオプションを探します。

9
Stephen Kitt

Mac OSX xargsGNU xargs のような長いオプションをサポートしていません。 GNU xargsのように--replaceを使用するには、-Iを使用します。

find docs/ -name "*png" | xargs -I F python myscript.py "F"

このアプローチは改行を含むファイル名で中断することに注意してください。find -print0xargs -0とともに使用したい場合:

find docs/ -name "*png" -print0 | xargs -0 -I F python myscript.py "F"

または標準的なもの:

find docs/ -name "*png" -exec python myscript.py {} +
2
cuonglm