जहाँ तक मुझे पता है, find
फ़ाइल से पैटर्न पढ़ने का बताने का कोई विकल्प नहीं है । एक आसान तरीका यह है कि उन पैटर्नों को सहेजा जाए जिन्हें मैं किसी फ़ाइल में छोड़ना चाहता हूं और उस फाइल को रिवर्स के लिए इनपुट के रूप में पास करता हूं grep
। एक उदाहरण के रूप में, मैंने निम्नलिखित फाइलें और निर्देशिकाएं बनाई हैं:
$ tree -a
.
├── a
├── .aa
├── .aa.bak
├── a.bck
├── b
├── .dir1
│ └── bb1.bak
├── dir2
│ └── bb2.bak
├── b.bak
├── c
├── c~
├── Documents
│ └── Documents.bak
├── exclude.txt
├── foo.backup
└── Music
└── Music.bak
अगर मैं उदाहरण आप सही तरीके से तैनात समझ में आया, आप ले जाना चाहते a.bck
, .aa.bak
, b.bak
, c~
, foo.backup
और dir2/bb2.bak
कचरा और छुट्टी के लिए .aa.bak
, .dir1/bb1.bak
, Documents/Documents.bak
और Music/Music.bak
कि वे कहाँ हैं। इसलिए, मैंने exclude.txt
निम्नलिखित सामग्रियों के साथ फ़ाइल बनाई है (आप जितना चाहें उतना जोड़ सकते हैं):
$ cat exclude.txt
./.*/
./Music
./Documents
मैं इसका उपयोग करता हूं ./.*/
क्योंकि मैंने आपकी मूल खोज को समझा है कि आप छिपी हुई बैकअप फ़ाइलों ( .foo
) को चालू निर्देशिका में ले जाना चाहते हैं, लेकिन छिपी हुई निर्देशिकाओं ( .foo/bar
) में किसी भी बैकअप फ़ाइलों को बाहर कर दें । इसलिए, मैं अब अवांछित फ़ाइलों को बाहर करने के लिए find
कमांड चला सकता हूं और उपयोग कर सकता हूं grep
:
$ find . -type f | grep -vZf exclude.txt | xargs -0 --no-run-if-empty trash-put
Grep विकल्प:
-v, --invert-match
Invert the sense of matching, to select non-matching
lines. (-v 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.)
-Z, --null
Output a zero byte (the ASCII NUL character) instead of
the character that normally follows a file name. For
example, grep -lZ outputs a zero byte after each file
name instead of the usual newline. This option makes
the output unambiguous, even in the presence of file
names containing unusual characters like newlines.
This option can be used with commands like find
-print0, perl -0, sort -z, and xargs -0 to process
arbitrary file names, even those that contain newline
characters.