ใช่จะดำเนินการบางอย่างเช่น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
คุณสามารถใช้สองตัวอย่างสุดท้ายในการสรุป หากคุณต้องการค้นหาแบบเรียกซ้ำโดยไม่ต้องค้นหาระดับแรกคุณจะมีตัวเลือกไม่กี่ตัวเลือกเช่นกันในบทสรุป
สรุป:
# 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.)