मैं इसके विपरीत निष्पादित करना चाहता हूं:
find . -name "*2013*"
वर्तमान निर्देशिका की सभी फाइलें खोजें जिनके नाम में स्ट्रिंग "2013" नहीं है। मैं उसे कैसे कर सकता हूँ?
मैं इसके विपरीत निष्पादित करना चाहता हूं:
find . -name "*2013*"
वर्तमान निर्देशिका की सभी फाइलें खोजें जिनके नाम में स्ट्रिंग "2013" नहीं है। मैं उसे कैसे कर सकता हूँ?
जवाबों:
सीधे शब्दों में:
find . ! -name '*2013*'
अन्य प्रकार की फ़ाइलों (निर्देशिकाओं, फीफोर्स, सिम्लिंक, डिवाइसेस, सॉकेट्स ...) को छोड़कर ! -type d
टाइप डायरेक्टरी की फाइलों को भी जोड़ें (जैसे .
ही), या -type f
केवल नियमित फाइल को शामिल करें ।
हालांकि सावधान रहें कि *
0 या अधिक वर्णों के अनुक्रम से मेल खाता है । इसलिए यह उन फ़ाइल नामों की रिपोर्ट कर सकता है जिनमें शामिल हैं 2013
यदि 2013
पूर्ववर्ती या कुछ ऐसा है जो वर्तमान स्थान में मान्य वर्णों के रूप में पूरी तरह से डिकोड नहीं किया जा सकता है।
ऐसा तब हो सकता है जब आप किसी ऐसे स्थान पर हों, जहाँ वर्ण एक से अधिक बाइट (जैसे UTF-8) में फ़ाइल नाम के लिए एन्कोड किए जा सकते हैं जो एक अलग एन्कोडिंग में एन्कोडेड हैं। उदाहरण के लिए, UTF-8 लोकेल में, Stéphane2013
अगर यह é
iso8859-15 वर्ण सेट (0xe9 बाइट के रूप में) में एन्कोड किया गया था , तो यह एक फ़ाइल की रिपोर्ट करेगा ।
सर्वश्रेष्ठ यह सुनिश्चित करने के लिए होगा कि फ़ाइल नाम लोकेल के वर्ण सेट में एन्कोड किए गए हों, लेकिन यदि आप इसकी गारंटी नहीं दे सकते, find
तो सी लोकेले में चारों ओर एक काम चलना है:
LC_ALL=C find . ! -name '*2013*'
Ksh फ़ाइल नाम पैटर्न पर्याप्त हैं:
# files with 2013
ls -d -- *2013*
# files without 2013
ls -d -- !(*2013*)
यदि आपका शेल बैश है, तो shopt -s extglob
आपको इस पैटर्न का उपयोग करने से पहले चलाने की आवश्यकता है (आप इसे अपने में डाल सकते हैं .bashrc
)। यदि आपका शेल zsh है, तो आपको चलाने की आवश्यकता है setopt ksh_glob
(आप इसे अपने में डाल सकते हैं .zshrc
)। Zsh भी प्रदान करता है ls -d -- ^*2013*
, जिसे प्रारंभिक की आवश्यकता होती है setopt extended_glob
।
आप इन फ़ाइलनामों के साथ क्या कर रहे हैं, ls
इसके आधार पर, उपयोग करने के लिए सही आदेश नहीं हो सकता है। एक सरणी में उन्हें स्टोर करने के लिए
filenames=( !(*2013*) )
for f in "${filenames[@]}"; do ...; done
वर्तमान निर्देशिका की सभी फाइलें खोजें जिनमें एक निश्चित स्ट्रिंग नहीं है, यहां "2013":
find . ! -name "*2013*" -type f
ls
यदि पैटर्न किसी भी फ़ाइल से मेल नहीं खाता है तो एक त्रुटि संदेश लौटाएगा)। यह भी ध्यान दें किksh
सूची को क्रमबद्ध किया जाएगा।