Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

Linux 'find' कमांड मास्टर करें: व्यावहारिक उदाहरण और सिंटैक्स गाइड

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 उपयोगकर्ता के स्वामित्व में है
एक्शन
-print फ़ाइल का नाम आउटपुट करता है (डिफ़ॉल्ट कार्रवाई)
-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 {} ';'


  1. लिनक्स और macOS में fd का उपयोग करके फ़ाइलों को तेजी से कैसे खोजें लिनक्स और macOS में fd का उपयोग करके फ़ाइलों को तेजी से कैसे खोजें

    fd, find कमांड का एक सरल विकल्प है। यह आपके टाइप किए गए कमांड को छोटा और मुद्दे पर रखने के लिए एक छोटे सिंटैक्स और संक्षिप्त कमांड संरचना का उपयोग करता है। हालांकि, वह वर्बोसिटी की कमी जो fd को टाइप करना आसान बनाती है, इसे समझना अधिक कठिन बना देती है। fd डिफ़ॉल्ट find कमांड की तुलना में पैटर्न-मैचिं

  1. मास्टर लिनक्स कमांड चेनिंग: व्यावहारिक उदाहरणों के साथ 10 आवश्यक ऑपरेटर्स मास्टर लिनक्स कमांड चेनिंग: व्यावहारिक उदाहरणों के साथ 10 आवश्यक ऑपरेटर्स

    लिनक्स कमांड की चेनिंग का अर्थ है, कई कमांड को मिलाना और उन्हें उनके बीच उपयोग किए गए ऑपरेटर के व्यवहार के आधार पर निष्पादित करना। लिनक्स में कमांड की चेनिंग, कुछ ऐसा है जैसे आप शेल में ही छोटे शेल स्क्रिप्ट लिख रहे हों, और उन्हें सीधे टर्मिनल से निष्पादित कर रहे हों। चेनिंग प्रक्रिया को स्वचालित कर

  1. आवश्यक Linux ls कमांड: फ़ाइलों और निर्देशिकाओं को त्वरित और प्रभावी ढंग से सूचीबद्ध करें आवश्यक Linux ls कमांड: फ़ाइलों और निर्देशिकाओं को त्वरित और प्रभावी ढंग से सूचीबद्ध करें

    Linux में ls कमांड शायद उन पहले कमांड में से एक है जिनकी आपको कभी आवश्यकता होगी। इस लेख में, हम कमांड और आमतौर पर उपयोग किए जाने वाले पैरामीटर्स पर जाएंगे। मेरा पसंदीदा विकल्प सेट इस प्रकार है: ls -Zaltrh आइए प्रत्येक विकल्प को व्यक्तिगत रूप से देखें, और बताएं कि विकल्पों का पूरा समूह क्यों उपयोगी ह