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