मैं 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
) -name
घfile.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)-release
OSX पर) का परीक्षण किया गया है , और यह GNUism पर बहुत अधिक भरोसा नहीं करता है।
find
) उस फ़ाइल, या खोज में है कि फाइल?