はい、のfind ./work -print0 | xargs -0 rm
ようなものを実行しますrm ./work/a "work/b c" ...
。で確認できecho
、find ./work -print0 | xargs -0 echo rm
実行されるコマンドを出力します(空白は適切にエスケープされますが、echo
表示されません)。
取得するにはxargs
真ん中に名前を入れて、あなたが追加する必要がある-I[string]
場合は、[string]
あなたが使用したい、この場合には、引数に置き換えることにしたいものです-I{}
例えば、<strings.txt xargs -I{} grep {} directory/*
。
実際に使用したいものはgrep -F -f strings.txt
次のとおりです。
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file
contains zero patterns, and therefore matches nothing. (-f is
specified by POSIX.)
そのgrep -Ff strings.txt subdirectory/*
ため、文字列のすべての出現をstrings.txt
リテラルとして検索-F
します。オプションをドロップすると、ファイルで正規表現を使用できます。実際に使用することgrep -F "$(<strings.txt)" directory/*
もできます。練習したい場合find
は、要約の最後の2つの例を使用できます。最初のレベルだけでなく再帰的な検索を行う場合は、いくつかのオプションがあります。これも概要にあります。
概要:
# grep for each string individually.
<strings.txt xargs -I{} grep {} directory/*
# grep once for everything
grep -Ff strings.txt subdirectory/*
grep -F "$(<strings.txt)" directory/*
# Same, using file
find subdirectory -maxdepth 1 -type f -exec grep -Ff strings.txt {} +
find subdirectory -maxdepth 1 -type f -print0 | xargs -0 grep -Ff strings.txt
# Recursively
grep -rFf strings.txt subdirectory
find subdirectory -type f -exec grep -Ff strings.txt {} +
find subdirectory -type f -print0 | xargs -0 grep -Ff strings.txt
-l
実際の行を表示する必要がない場合は、一致する各ファイルの名前だけを取得するオプションを使用できます。
-l, --files-with-matches
Suppress normal output; instead print the name of each input
file from which output would normally have been printed. The
scanning will stop on the first match. (-l is specified by
POSIX.)