हाँ, 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.)