Evet, find ./work -print0 | xargs -0 rm
böyle bir şey yürütecek rm ./work/a "work/b c" ...
. Sen ile kontrol edebilirsiniz echo
, find ./work -print0 | xargs -0 echo rm
(gerçi, uygun şekilde kaçırmak olacaktır boşluk hariç yürütülecek komutu yazdırır echo
olduğunu göstermeyecektir).
Almak için xargs
ortada isimlerini koymak, eklemek gerekir -I[string]
nerede, [string]
kullandığınız ediyorum bu durumda, bağımsız değişkenle değiştirilmesi istediğiniz şeydir -I{}
örn <strings.txt xargs -I{} grep {} directory/*
.
Aslında kullanmak istediğiniz şey 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.)
Yani grep -Ff strings.txt subdirectory/*
herhangi bir dizenin tüm oluşumlarını strings.txt
bir değişmez olarak bulur , -F
seçeneği bırakırsanız dosyada normal ifadeleri kullanabilirsiniz. Aslında kullanabilirsiniz grep -F "$(<strings.txt)" directory/*
. Pratik yapmak istiyorsanız find
, özetin son iki örneğini kullanabilirsiniz. Yalnızca ilk düzey yerine yinelemeli arama yapmak istiyorsanız, özette de birkaç seçeneğiniz vardır.
Özet:
# 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
Gerçek satırı görmeniz gerekmiyorsa, eşleşen her dosyanın adını almak için bu seçeneği kullanabilirsiniz :
-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.)