-exec
を理解しています +
を取ることができます xargs
の動作を模倣するオプション 。あるフォームを他のフォームよりも優先したい状況はありますか?
パイプの使用を避けるためだけなら、私は個人的に最初の形式を好む傾向があります。私は確かにfind
の開発者を理解しています 適切な最適化を行っている必要があります。正しいですか?
承認された回答:
あなたは見つけるために呼び出しを連鎖させたいかもしれません(あなたが学んだとき、それが可能であると一度、それは今日かもしれません)。もちろん、これはあなたが検索にとどまっている間だけ可能です。 xargsにパイプすると、範囲外になります。
小さな例、2つのファイルa.lstとb.lst:
cat a.lst
fuddel.sh
fiddel.sh
cat b.lst
fuddel.sh
ここではトリックはありません。両方に「fuddel」が含まれているのに、一方だけに「fiddel」が含まれているという事実です。
それを知らなかったとしましょう。 2つの条件に一致するファイルを検索します:
find -exec grep -q fuddel {} ";" -exec grep -q fiddel {} ";" -ls
192097 4 -rw-r--r-- 1 stefan stefan 20 Jun 27 17:05 ./a.lst
ええと、grepまたは別のプログラムが両方の文字列を条件として渡すための構文を知っているかもしれませんが、それは重要ではありません。ここでは、引数としてファイルを指定すると、trueまたはfalseを返すことができるすべてのプログラムを使用できます。grepは一般的な例にすぎません。
また、 find -execをフォローすることもできます。 -lsなどの他の検索コマンドを使用する または-削除 または同様のもの。削除はrm(ファイルを削除する)だけでなく、rmdir(ディレクトリを削除する)も行うことに注意してください。
このようなチェーンは、特に指定されていない限り(つまり、-or
を使用して)、コマンドのANDの組み合わせとして読み取られます。 スイッチ(およびパレン(マスキングが必要)))。
つまり、検索チェーンを離れることはありません。これは便利なことです。 -xargsを使用しても利点はありません。ファイルの受け渡しに注意する必要があるためです。これは、見つける必要がないことです。各ファイルの受け渡しを単一の引数として自動的に処理します。
>中括弧を見つけるためにマスキングが必要だと思われる場合は、証拠を求める私の質問に気軽にアクセスしてください。私の主張は:あなたはしません。
関連:順守-意味を見つける-辞書検索!