Linux शेल में find कमांड आपको फाइलसिस्टम में फ़ाइलों को खोजने की अनुमति देती है। यह नाम, उपयोगकर्ता अनुमतियों, और आकार के आधार पर फ़ाइलों को ढूंढ सकता है। find कमांड पाई गई फ़ाइलों पर कार्रवाई भी कर सकती है।
Find कमांड सिंटैक्स
find कमांड के लिए सिंटैक्स इस प्रकार है:
find [OPTIONS] [PATH] [EXPRESSION]
जहां:
- [OPTIONS] नीचे दी गई तालिका से विकल्प हैं जो find व्यवहार निर्धारित करते हैं
- [PATH] खोज के लिए प्रारंभिक बिंदु है
- [EXPRESSION] मिलान फ़ाइलों को खोजने के लिए परीक्षण और पाई गई फ़ाइलों पर की जाने वाली किसी भी कार्रवाई को परिभाषित करता है
विकल्प
यहां मैनुअल से अनुकूलित find कमांड के लिए आमतौर पर उपयोग किए जाने वाले OPTIONS दिए गए हैं:
| -P | कभी भी सिम्बोलिक लिंक का पालन न करें। यह डिफ़ॉल्ट व्यवहार है |
| -L | सिम्बोलिक लिंक का पालन करें। जब find फ़ाइलों की जांच या जानकारी प्रिंट करता है, तो उपयोग की जाने वाली जानकारी लिंक से नहीं, बल्कि उस फ़ाइल के गुणों से ली जाएगी जिस पर लिंक इंगित करता है |
| -H | सिम्बोलिक लिंक का पालन न करें, कमांड लाइन आर्गुमेंट प्रोसेस करते समय छोड़कर |
एक्सप्रेशन
ये find मैनुअल से कुछ सामान्य स्टेटमेंट हैं जिनका उपयोग EXPRESSION बनाने के लिए किया जा सकता है, जो मिलान फ़ाइलों के लिए परीक्षण करता है और वैकल्पिक रूप से उन पर कार्रवाई करता है:
| टेस्ट (खोज शर्तें) | |
|---|---|
| -empty | खाली फ़ाइलें ढूंढें |
| -executable | निष्पादन योग्य फ़ाइलों और खोज योग्य डायरेक्टरी से मेल खाता है |
| -group name | फ़ाइल name वाले समूह से संबंधित है |
| -mtime n | फ़ाइल डेटा को अंतिम बार n*24 घंटे से कम, अधिक, या ठीक पहले संशोधित किया गया था |
| -name pattern | फ़ाइल नाम का आधार (पथ के साथ अग्रणी डायरेक्टरी हटाई गई) पैटर्न pattern से मेल खाता है |
| -path pattern | फ़ाइल पथ पैटर्न pattern से मेल खाता है |
| -readable | वर्तमान उपयोगकर्ता द्वारा पठनीय फ़ाइलों से मेल खाता है |
| -size n | फ़ाइल n यूनिट स्पेस से कम, अधिक, या ठीक उपयोग करती है, राउंडिंग अप (उपलब्ध यूनिट के लिए नीचे दी गई तालिका देखें) |
| -type c | फ़ाइल प्रकार c की है (c के मान के लिए नीचे दी गई तालिका देखें) |
| -user name | फ़ाइल name उपयोगकर्ता के स्वामित्व में है |
| एक्शन | |
|---|---|
| फ़ाइल का नाम आउटपुट करता है (डिफ़ॉल्ट कार्रवाई) | |
| -prune | यदि फ़ाइल एक डायरेक्टरी है, तो उसमें न उतरें |
| -depth | प्रत्येक डायरेक्टरी की सामग्री को डायरेक्टरी से पहले प्रोसेस करें |
| -delete | मिलान फ़ाइलें हटाएं। -delete कार्रवाई एक विकल्प की तरह भी काम करती है (क्योंकि यह -depth का तात्पर्य करती है) |
| -exec command | command निष्पादित करें |
| -execdir command | -exec की तरह, लेकिन निर्दिष्ट कमांड मिलान फ़ाइल वाले सबडायरेक्टरी से चलाया जाता है |
| -ok command | -exec की तरह लेकिन पहले उपयोगकर्ता से पूछें। |
| -okdir command | -execdir की तरह लेकिन -ok के समान तरीके से पहले उपयोगकर्ता से पूछें। |
| -printf format | format में फ़ाइल विवरण प्रिंट करें |
एक्सप्रेशन में ऑपरेटर
एक्सप्रेशन में आइटम को एक साथ जोड़ने के लिए ऑपरेटर का उपयोग किया जा सकता है:
| -o | OR |
| -a | AND (जब कोई ऑपरेटर प्रदान नहीं किया जाता है तो एक्सप्रेशन के बीच डिफ़ॉल्ट ऑपरेटर) |
फ़ाइलों को खोजने के लिए विकल्पों और एक्सप्रेशन की पूरी सूची के लिए, आप निम्न चला सकते हैं:
man find
Find कमांड उदाहरण
विकल्प, एक्सप्रेशन, और कार्रवाई को मिलान फ़ाइलों को सूचीबद्ध करने के लिए सरल find ऑपरेशन या जटिल ऑपरेशन बनाने के लिए जोड़ा जा सकता है जो जटिल शर्तों द्वारा फ़ाइलों को ढूंढते हैं और कार्रवाई करते हैं। उदाहरणों के लिए नीचे देखें:
फ़ाइल नाम से फ़ाइलें ढूंढें
यह उदाहरण /home/screw डायरेक्टरी में myfile नाम की सभी फ़ाइलों को ढूंढता है:
find /home/screw -name myfile
प्रकार के अनुसार खोजें
उपरोक्त कमांड सभी मिलान फ़ाइलें लौटाएगा – सहित डायरेक्टरी, लिंक, और डिवाइस – फाइलसिस्टम में सब कुछ।
-type f एक्सप्रेशन खोज को केवल फ़ाइलों तक सीमित करता है। myfile नाम की फ़ाइलों को खोजने के लिए:
find /home/screw -type f -name myfile
या, केवल डायरेक्टरी खोजें:
find /home/screw -type d -name myfile
उपलब्ध प्रकार हैं:
| b | ब्लॉक (बफर्ड) विशेष |
| c | कैरेक्टर (अनबफर्ड) विशेष |
| d | डायरेक्टरी |
| p | नेम्ड पाइप (FIFO) |
| f | नियमित फ़ाइल |
| l | सिम्बोलिक लिंक; यह कभी सच नहीं होता अगर -L विकल्प या -follow विकल्प प्रभाव में है, जब तक कि सिम्बोलिक लिंक टूटा न हो |
| s | सॉकेट |
केस संवेदनशीलता
-name विकल्प केस सेंसिटिव है – केस संवेदनशीलता के बिना खोजने के लिए -iname का उपयोग करें:
find /home/screw -iname mYFiLe
वाइल्डकार्ड और रेगेक्स का उपयोग करके एक्सटेंशन द्वारा फ़ाइलें ढूंढें
आप फ़ाइल नामों में वाइल्डकार्ड (*) का उपयोग कर सकते हैं, जो आपको फ़ाइल एक्सटेंशन द्वारा खोजने की अनुमति देता है:
find -L /home/screw -name '*.pdf'
उपरोक्त .pdf एक्सटेंशन वाली सभी फ़ाइलों को खोजेगा। कोटेड खोज पैटर्न में रेगेक्स हो सकता है।
नाम या एक्सटेंशन द्वारा फ़ाइलों को बाहर करना
-not ऑपरेटर का उपयोग नाम या पैटर्न द्वारा फ़ाइलों को बाहर करने के लिए किया जा सकता है, उन सभी परिणामों को लौटाता है जो मेल नहीं खाते:
find /home/screw -type f -not -name '*.pdf'
पूरी डायरेक्टरी को परिणामों से बाहर करना
मिलान पथ और उनकी सामग्री को बाहर करने के लिए -prune विकल्प का उपयोग करें। नीचे दिया गया उदाहरण परिणामों से /home/screw/junk डायरेक्टरी को बाहर करेगा:
find /home/screw -path /home/screw/junk -prune -o -print
आकार के अनुसार फ़ाइलें खोजें
यह उदाहरण 500 किलोबाइट से कम की सभी फ़ाइलों को खोजता है:
find /home/screw -type f -size -500k
यह दो आकार शर्तों को पास करके 100 और 200 किलोबाइट के बीच की फ़ाइलों को ढूंढेगा:
find /home/screw -type f -size +100k -size -200k
आकार के अनुसार खोज के लिए उपलब्ध यूनिट हैं:
| b | 512-बाइट ब्लॉक (यह डिफ़ॉल्ट है यदि कोई सफ़िक्स उपयोग नहीं किया जाता है) |
| c | बाइट्स |
| w | दो-बाइट वर्ड्स |
| k | किबिबाइट्स (KiB, 1024 बाइट्स की इकाइयाँ) |
| M | मेबीबाइट्स (MiB, 1024 * 1024 = 1048576 बाइट्स की इकाइयाँ) |
| G | गिबिबाइट्स (GiB, 1024 * 1024 * 1024 = 1073741824 बाइट्स की इकाइयाँ) |
संशोधन या एक्सेस तिथि
निम्न उदाहरण पिछले 14 दिनों में संशोधित सभी .txt फ़ाइलों को ढूंढता है:
find /home/screw -name '*.txt' -mtime 14
एक्सेस के बजाय संशोधन तिथि के अनुसार खोजने के लिए, -mtime के बजाय -atime विकल्प का उपयोग करें।
आप दिए गए अंतराल से अधिक या कम संशोधित फ़ाइलों को खोजने के लिए एक चिह्न (+ या –) भी जोड़ सकते हैं – यह उदाहरण उन फ़ाइलों को लौटाएगा जो 14 दिन पहले से अधिक संशोधित हुई थीं।
find /home/screw -name '*.txt' -mtime +14
दिनों के बजाय मिनटों को समय की इकाई के रूप में उपयोग करने के लिए, आप -mtime और -atime के बजाय -mmin -amin स्थानापन्न कर सकते हैं।
हमेशा की तरह, मिक्स एंड मैच के लिए बहुत अधिक विकल्प हैं, सभी मैनुअल में उपलब्ध हैं, जिसे निम्न चलाकर उपलब्ध कराया जाता है:
man find
मालिक उपयोगकर्ता/समूह
/home/screw डायरेक्टरी में root के स्वामित्व वाली सभी फ़ाइलों को ढूंढने के लिए, चलाएं:
find /home/screw -user root
अनुमतियाँ
निम्न कमांड वैश्विक पढ़ने/लिखने की अनुमति वाली सभी फ़ाइलों को ढूंढेगा:
find /home/screw -perm 777
chmod कमांड और यह क्या करता है, पर हमारा लेख देखें।
संयोजन
खोज एक्सप्रेशन के किसी भी संयोजन का उपयोग किया जा सकता है। यदि उनके बीच कोई ऑपरेटर शामिल नहीं है, तो यह माना जाएगा कि फ़ाइल के मिलान के लिए दोनों शर्तें पूरी होनी चाहिए (यानी, AND ऑपरेटर डिफ़ॉल्ट है)।
यह उदाहरण पिछले 14 दिनों में बनी सभी टेक्स्ट फ़ाइलों को 500kb से कम खोजता है:
find /home/screw -name '*.txt' -mtime 14 -type f -size -500k
पाई गई फ़ाइलों पर कार्रवाई
डिफ़ॉल्ट रूप से, find कमांड find ऑपरेशन परिणाम प्रिंट करेगा (वही -print कार्रवाई को कॉल करना)।
find /home/screw -name myfile -print
परिणाम प्रारूप कस्टमाइज़ करना
आप परिणामों के आउटपुट को किसी भी पाई गई फ़ाइल के बारे में अतिरिक्त जानकारी शामिल करने के लिए कस्टमाइज़ कर सकते हैं। यह उदाहरण फ़ाइल नाम प्रिंट करता है, उसके बाद एक डैश, उसके बाद फ़ाइल का आकार बाइट्स में:
find /home/screw -name '*.txt' -printf '%f - %s bytes'
आउटपुट कस्टमाइज़ करने के लिए कई वेरिएबल का उपयोग किया जा सकता है, फ़ाइल आकार से लेकर फ़ाइल संशोधन और एक्सेस समय के लिए व्यक्तिगत दिनांक फ़ील्ड तक – पूरी सूची के लिए मैनुअल देखें।
परिणाम फ़ाइल में लिखना
अपने find ऑपरेशन के परिणामों को टेक्स्ट फ़ाइल पर रीडायरेक्ट करें:
find /home/screw -name myfile > find_results.txt
हटाना
-delete कार्रवाई मिलान फ़ाइलों को हटा देगी (पुष्टि के बिना, इसलिए सावधान रहें!):
find /home/screw -name '*.junk' -delete
-exec / *-execdir * के साथ कमांड निष्पादित करना
आप -exec कार्रवाई का उपयोग करके प्रत्येक find परिणाम के विरुद्ध कोई भी शेल कमांड निष्पादित कर सकते हैं:
find /home/screw -name '*.txt' -exec ls -la {} ';'
-exec वर्तमान कार्य डायरेक्टरी से कमांड निष्पादित करेगा। पाई गई फ़ाइल के स्थान से कमांड निष्पादित करने के लिए, इसके बजाय -execdir का उपयोग करें:
find /home/screw -name '*.txt' -execdir ls -la {} ';'
उपरोक्त दो उदाहरणों में, ls -la प्रत्येक परिणाम के विरुद्ध चलाया जाता है। कर्ली ब्रेसिज़ {} find कमांड परिणामों से बदल दिए जाएंगे, और ';' ls कमांड के लिए कमांड लाइन आर्गुमेंट को समाप्त करता है ताकि find को पता चले कि वे कहां समाप्त होते हैं।
-ok / -okdir के साथ पुष्टि के लिए संकेत देना
-ok कार्रवाई -exec कार्रवाई की तरह ही काम करती है, लेकिन यह दिए गए कमांड को चलाने से पहले आपसे पूछती है। यह उपयोगी है यदि आप फ़ाइलों को हटाना चाहते हैं, लेकिन प्रत्येक फ़ाइल हटाए जाने से पहले पूछा जाना चाहते हैं:
find /home/screw -name '*.txt' -ok rm {} ';'
-okdir भी संकेत देता है लेकिन पाई गई फ़ाइल के स्थान से कमांड निष्पादित करता है:
find /home/screw -name '*.txt' -okdir rm {} ';'