1

"rGEO"次のコマンドを使用して、ディレクトリ内の文字列を検索しようとしています。

find . -name "*" -type f -print | xargs grep "rGEO" 
./home/oper1/AgencyTape/geo/exe/gngeo.cmd:${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail

この場合、一致する行と上記の文字列に一致する行を含むファイル名が返されます。

find . -name "*" -type f -exec grep "rGEO" {} \;

この場合、私は戻ってきます:

${WEB_DIR}/exe/web_reports.sh -aGN -d${prev_ccyy}${prev_mm} -rGEO -nomail

行を含むファイルは印刷されません。ご覧のとおり、2 つの出力には多くの違いがあります。

を使用するxargsと、より明確で正確な出力が得られます。

私の質問は: 2 つのコマンドの違いは何ですか? 私には、それらは同じロジックを実行しているように見えますが、結果は異なります。

4

2 に答える 2

5

what is the difference between the two commands? To me, they seem to be performing the same logic, but getting different results.

以下は、xargs と exec の主な違いの 1 つです。

find . -name "*.c" -exec ls -al {} \;個々のファイルごとにコマンド ls -al を実行します。

find . -name "*.c" | xargs ls -alfind コマンドの出力から引数リストを作成し、それを ls に渡します。

以下の find コマンドの生成された出力を検討してください。

a.c
b.c
c.c

最初のコマンド(exec)が実行されます

ls -l a.c
ls -l b.c
ls -l c.c

しかし、2番目(xargs)は実行されます

ls -l a.c b.c c.c

お役に立てれば。

于 2014-10-13T07:18:59.257 に答える
0

-print を追加すると、ファイルの名前も返されますが、方法は少し異なります。

find . -name "*" -type f -exec grep "rGEO" {} \; -print

私は内部の仕組みを認識していません。これがどのように異なるかです。find コマンドが 2 つのファイル a.txt と b.txt を見つけたとします。

-exec はそれらに対して同様に機能します。

grep "rGEO" a.txt
grep "rGEO" b.txt

ただし、xargs は次のように機能します。

grep "rGEO" a.txt b.txt.

それが役に立てば幸い

于 2012-12-25T09:39:37.880 に答える