0

特定のコマンドの出力としてファイル名のリストがあります。これらの各ファイルを特定のディレクトリで見つける必要があります。

次のコマンドを試しました:

ls -R /home/ABC/testDir/ | grep "\.java" | xargs find /home/ABC/someAnotherDir -iname

しかし、それは私に次のエラーを与えています:

find: paths must precede expression: XYZ.java

それを行う正しい方法は何ですか?

4

2 に答える 2

3
ls -R /home/ABC/testDir/ | grep -F .java | 
    while read f; do find . -iname "$(basename $f)"; done

${f##*/}ベース名の代わりに使用することもできます。または;

find /home/ABC/testDir -iname '*.java*' | 
 while read f; do find . -iname "${f##*/}"; done

ls間違いなく、ファイル名の空白が問題を引き起こすと主張して、ファイル名の区切り文字としてヌルバイトを使用せずに or find の出力を解析することに反対する人が多いことに注意してください。それらの人々は通常、ファイル名の改行を無視し、彼らの異論は無視しても問題ありません。(ファイル名に空白を許可しない限り、つまり!)

より良いオプションは次のとおりです。

find /home/ABC/testDir -iname '*.java' -exec find . -iname {}

xargs が機能しない理由は、find 内で -iname に 2 つの引数を渡すことができないためです。

于 2013-02-20T03:12:35.803 に答える
0

/home/ABC/testDir -name "\.java" を検索

于 2013-02-20T03:12:31.963 に答える