मैं एक फ़ोल्डर की सभी फाइलों को कैसे सूचीबद्ध कर सकता हूं लेकिन उनके फ़ोल्डरों या सबफाइल्स को नहीं। दूसरे शब्दों में: मैं केवल फाइलों को कैसे सूचीबद्ध कर सकता हूं?
मैं एक फ़ोल्डर की सभी फाइलों को कैसे सूचीबद्ध कर सकता हूं लेकिन उनके फ़ोल्डरों या सबफाइल्स को नहीं। दूसरे शब्दों में: मैं केवल फाइलों को कैसे सूचीबद्ध कर सकता हूं?
जवाबों:
का उपयोग कर find:
find . -maxdepth 1 -type f
-maxdepth 1विकल्प का उपयोग करना सुनिश्चित करता है कि आप केवल वर्तमान निर्देशिका में देखते हैं (या, यदि आप .किसी पथ के साथ प्रतिस्थापित करते हैं, तो वह निर्देशिका)। यदि आप उस और उपनिर्देशिका में सभी फ़ाइलों की पूर्ण पुनरावर्ती सूची चाहते हैं, तो बस उस विकल्प को हटा दें।
findमैक पर, न तो विकल्प हैं -type, न ही -maxdepthविकल्प।
-typeऔर -maxdepthनहीं कर रहे हैं विकल्प सामान्य अर्थों में; बीएसडी find(जैसा कि ओएस एक्स पर उपयोग किया जाता है) उन्हें प्राइमरी कहता है , और उन्हें फ़ाइल नाम ऑपरेंड (एस) के बाद आना चाहिए ( .इस मामले में, ध्यान दें कि लिनक्स पर विपरीत, बीएसडी संस्करण को कम से कम एक स्पष्ट फ़ाइल नाम ऑपरेंड की आवश्यकता है); इस उत्तर में कमांड निश्चित रूप से एक मैक पर काम करता है।
find *.png -maxdepth 0 -type fसे बचने के लिए ./उत्पादन फ़ाइल नामों में उपसर्ग, यह भी ध्यान रखें -maxdepthकी 0, नहीं 1) है, जब तक आप सभी की जरूरत फ़ाइल के रूप में नाम में वर्णमाला के क्रम । यदि आप चाहते हैं कि lsअन्यथा आप के लिए क्या कर सकते हैं (विभिन्न आउटपुट स्वरूप / आदेश, इनलाइन नियंत्रण इस बात पर कि क्या छिपी हुई वस्तुओं को शामिल किया गया है या नहीं), [मल्टी-] टाइप फ़िल्टरिंग के साथ पूरक, मेरे उत्तर से स्क्रिप्ट मदद कर सकता है।
find * -maxdepth 0 -type fसे @ एलेक्सहॉल की टिप्पणी से लिया गया एक विकल्प find . -maxdepth 1 -type f: आमतौर पर find . ...इसमें छिपी हुई वस्तुएं शामिल होती हैं , आमतौर पर आउटपुट फ़ाइल नाम के साथ उपसर्ग ./और, जीएनयू find(लिनक्स) के साथ, आमतौर पर एक अनसुलझी सूची को आउटपुट करता है। find * ..., शेल को सामने की ओर ग्लोबिंग करने देने के कारण , डिफ़ॉल्ट रूप से छिपे हुए आइटम को छोड़कर (के साथ बदला जा सकता है shopt -s dotglob), आउटपुट मात्र फ़ाइलनाम (कोई उपसर्ग नहीं), वर्णानुक्रम में सॉर्ट किया गया। न तो दृष्टिकोण में फ़ाइलों के लिए सीमलिंक शामिल हैं ; -Lऐसा करने के लिए विकल्प का उपयोग करें।
ls -p | grep -v /
ls -p आपको फ़ोल्डर के नाम के बाद / दिखाता है, जो आपको हटाने के लिए टैग के रूप में कार्य करता है।
lsके अलावा find, बाद रिटर्न संबंधित पथ और पूर्व केवल फ़ाइल नाम के बाद से। इस काम के लिए सही उपकरण का उपयोग करें।
कारप्लेट- findआधारित उत्तर ( find . -maxdepth 1 -type f) सिद्धांत रूप में काम करता है, लेकिन इसका उपयोग करने के समान नहीं है ls: आपको सभी उपसर्गों के साथ फ़ाइलनामों की एक संभावित रूप से अनसुलझी सूची मिलती है , और आप कई विकल्पों को लागू करने की क्षमता खो देते हैं./ls ;
भी find सदा ही पाता छिपा आइटम भी है, जबकि ls'व्यवहार उपस्थिति या के अभाव पर निर्भर करता है -aया -Aविकल्प।
एक सुधार , ने सुझाव दिया एलेक्स हॉल प्रश्न पर एक टिप्पणी में करने के लिए है गठबंधन खोल ग्लोबिंग साथfind :
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
lsकई अन्य छँटाई / आउटपुट-प्रारूप विकल्पों तक पहुँच होती है।हंस रोजगमैन का ls+ grepउत्तर व्यावहारिक है, लेकिन आप लंबे ( -l) आउटपुट प्रारूप का उपयोग करते हुए लॉक कर देते हैं ।
इन सीमाओं को संबोधित करने के लिए मैंने fls( f iltering ls ) उपयोगिता लिखी ,
ls प्रदान करती है ,fफ़ाइलों के लिए, dनिर्देशिकाओं के लिए, औरlls तर्क की सूची से पहले सहानुभूति रखने के लिए (रन fls --helpया fls --manअधिक जानने के लिए)।उदाहरण:
fls f # list all files in current dir.
fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first
fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
समर्थित मंच
नोट: यदि आप Node.js का उपयोग नहीं करते हैं, तो इसका पैकेज मैनेजर, npmप्लेटफार्मों पर काम करता है और इसे स्थापित करना आसान है; प्रयत्न
curl -L https://git.io/n-install | bash
स्थापित Node.js के साथ , निम्नानुसार स्थापित करें:
[sudo] npm install fls -g
नोट :
क्या आपको आवश्यकता sudoहै कि आप इस बात पर निर्भर करते हैं कि आपने Node.js / io.js को कैसे स्थापित किया है और क्या आपने बाद में अनुमतियां बदली हैं ; यदि आपको कोई EACCESत्रुटि मिलती है , तो फिर से प्रयास करें sudo।
-gसुनिश्चित करता है वैश्विक स्थापना और डाल करने के लिए की जरूरत है flsअपने सिस्टम के में $PATH।
bashलिपि को डाउनलोड करेंfls ।chmod +x fls।$PATHजैसे /usr/local/bin(macOS) या /usr/bin(लिनक्स) में एक फ़ोल्डर में सिमिलिंक करें ।-1(नंबर एक); lsवास्तव में "नंगे" आउटपुट को डिफॉल्ट करता है, अर्थात, केवल फ़ाइल नाम, लेकिन जब टर्मिनल पर आउटपुट एक कॉलम-आधारित लेआउट (प्रति पंक्ति कई फ़ाइल नाम) का उपयोग करता है। प्रति आउटपुट लाइन में एक फ़ाइल नाम प्राप्त करने के लिए (जो कि क्या dir /bकरता है, यदि मेमोरी कार्य करता है), -1विकल्प का उपयोग करें , जो वास्तव में अंतर्निहित है जब stdout एक टर्मिनल से जुड़ा नहीं है , जैसे कि पाइप या आउटपुट फ़ाइल भेजते समय।
मुझे lsनमूने के लिए विकल्पों का उपयोग करना पसंद है :
-lएक लंबी सूची प्रारूप का उपयोग करें-tसंशोधन समय के अनुसार क्रमबद्ध, सबसे पहले नया-rछँटाई करते समय रिवर्स ऑर्डर-F,--classifyपरिशिष्ट सूचक (प्रविष्टियों में से एक * / => @ |)-h,--human-readable-l और -s के साथ, प्रिंट आकार जैसे 1K 234M 2G आदि ...
कुछ समय --colorऔर अन्य सभी। (देखें ls --help)
इसमें फाइल, सिमिलिंक, डिवाइस, पाइप, सॉकेट आदि दिखाई देंगे।
इसलिए
find /some/path -maxdepth 1 ! -type d
आसानी से दिनांक द्वारा हल किया जा सकता है:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
या
find /some/path -maxdepth 1 -type f
आकार द्वारा क्रमबद्ध:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
छिपी हुई प्रविष्टियों को न दिखाने के लिए, जहाँ नाम डॉट से शुरू होता है, आप जोड़ सकते हैं ! -name '.*':
find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
फिर
आप बदल सकते /some/pathद्वारा .के लिए सूची में वर्तमान निर्देशिका या ..के लिए मूल निर्देशिका ।
फ़ाइलें खोजें: ls -l / home | grep "^ -" | tr -s '' | कट -d '' -f 9
निर्देशिका खोजें: ls -l / home | grep "^ d" | tr -s '' | cut -d '' -f 9
लिंक खोजें: ls -l / home | grep "^ l" | tr -s '' | कट -d '' -f 9
tr -s '' आउटपुट को स्पेस-सीमांकित फ़ाइल में बदल देता है, कट कमांड कहती है कि सीमांकक एक स्पेस है, और 9 वें फ़ील्ड (हमेशा फ़ाइल नाम / निर्देशिका नाम / लिंकनाम) को लौटाएं।
यह मेरे लिए हर समय उपयोगी है!
बस कार्लप्लेट के जवाब में जोड़ रहे हैं। फ़ाइलों के बहुत उपयोगी दृश्य के लिए, आप आउटपुट को ls पर पाइप कर सकते हैं।
find . -maxdepth 1 -type f|ls -lt|less
सूची प्रारूप में सबसे हाल ही में संशोधित फ़ाइलें दिखाता है, जब आप बहुत सारी फ़ाइलों को डाउनलोड कर चुके होते हैं, तो बहुत उपयोगी होते हैं, और हाल ही में गैर-क्लट किए गए संस्करण को देखना चाहते हैं।
lsमानक इनपुट नहीं पढ़ता है, इसलिए कुछ भी पाइप करना बेकार है ls। क्या आपको याद आया xargs?
findइस उत्तर में कमांड को पूरी तरह से अनदेखा किया गया है ; समग्र आदेश समान है ls -lt | less, जो किसी प्रकार की फ़िल्टरिंग नहीं करता है ।
findआप कर सकते हैं find . -maxdepth 1 -type f -ls। यह भी, मैक ओएस पर काम करने लगता है, हालांकि मेरा मानना है कि -maxdepthऔर -lsठीक से पोर्टेबल विकल्प नहीं हैं।
"ढूँढें '-maxdepth' मेरे पुराने संस्करण के साथ काम नहीं करता है, इसलिए मैं उपयोग करता हूं:
च में $ के लिए (एलएस); अगर [-f $ f]; तब गूंज $ च; फाई; किया हुआ
for f in $(ls)दोगुना गलत है। आप इसे ठीक कर सकते हैं for f in *लेकिन तब यह टूट जाएगा क्योंकि आप तर्क को echoठीक से उद्धृत नहीं कर रहे हैं ।