खोज कमांड का उपयोग कैसे करें कि यह अंतरतम निर्देशिका से मेल खाता है?


1

कहो कि मेरे पास निम्न फ़ाइल है

this/is/my/file.txt

क्या मैं दी गई इस फ़ाइल को खोज सकता हूँ जो मुझे केवल पता है कि फ़ाइल /my/निर्देशिका में है?


2
आप खोजना चाहते हैं के लिए ( find) उस फ़ाइल, या खोज में है कि फाइल?
बर्टिएब

मैं उस फाइल को ढूंढना चाहता हूं, जैसे। मैं यह जानना चाहता हूं this/is/my/file.txtकि मुझे पता file.txtहै कि /my/निर्देशिका में है और फ़ाइल के नाम से ढूंढना संभव नहीं है क्योंकि file.txtकई अन्य निर्देशिका में कई हैं
user445670

2
आपका ऑपरेटिंग सिस्टम क्या है? आप किस खोल का उपयोग कर रहे हैं?
DavidPostill

जवाबों:


1

मैं findअंतरतम निर्देशिका में एक फ़ाइल कैसे बनाऊँ ?

आप findएक विशिष्ट फ़ाइल ( file.txt) की तलाश करने के लिए उपयोग कर सकते हैं , और यह आपके लिए पुनरावृत्ति करेगा (निर्दिष्ट विकल्पों के लिए)। लेकिन क्या होगा अगर आपके पास दो file.txtएस हैं, और केवल एक मैच करना चाहते हैं , एक स्क्रिप्ट में उपयोग के लिए कहें? दर्ज awk, sort, headऔर cut:

find /my/ -type f -name file.txt | awk -F/ '{ print NF-1, $0 }' | sort -nr | head -n1 | cut -d " " -f2

यह एक परिणाम लौटाएगा - सबसे गहरा मैच - या कोई भी नहीं।

व्याख्या

  • findमें /my/सभी नियमित फ़ाइलें ( -type f) -namefile.txt

  • awkक्षेत्र विभाजक को /( -F/), और परिणाम में ( print NF-1, $0) के लिए उपसर्ग निर्धारित करके निर्देशिकाओं (गहराई) की संख्या की गणना करने के लिए इसे पास करें और प्राप्त करें

  • sort संख्यात्मक रूप से, सबसे बड़ी (सबसे अधिक निर्देशिका) से उतरते हुए

  • केवल एक परिणाम ( head -n1) लें

  • गहराई की गिनती बंद करें ( cut -d " " -f2)

ऐसा करने का एक छोटा तरीका हो सकता है, लेकिन यह सबसे गहरा परिणाम लौटाएगा। यह /निर्देशिका सीमांकन के लिए स्लैश मान लेता है , लेकिन मुझे लगता है कि हम इसकी अनुमति दे सकते हैं। GNU bash, version 4.3.30(1)-release(और GNU bash, version 3.2.53(1)-releaseOSX पर) का परीक्षण किया गया है , और यह GNUism पर बहुत अधिक भरोसा नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.