मेरे पास एक निर्देशिका है जिसमें हजारों फाइलें हैं, उनमें से कुछ छिपी हुई हैं ।
आदेश ls -a
छिपी हुई फ़ाइलों सहित सभी फ़ाइलों को सूचीबद्ध करें, लेकिन मुझे केवल छिपी हुई फ़ाइलों को सूचीबद्ध करने की आवश्यकता है ।
मुझे किस कमांड का उपयोग करना चाहिए?
मेरे पास एक निर्देशिका है जिसमें हजारों फाइलें हैं, उनमें से कुछ छिपी हुई हैं ।
आदेश ls -a
छिपी हुई फ़ाइलों सहित सभी फ़ाइलों को सूचीबद्ध करें, लेकिन मुझे केवल छिपी हुई फ़ाइलों को सूचीबद्ध करने की आवश्यकता है ।
मुझे किस कमांड का उपयोग करना चाहिए?
आदेश :
ls -ld .?*
केवल छिपी हुई फ़ाइलों को सूचीबद्ध करेगा ।
समझाओ :
-l use a long listing format -d, --directory list directory entries instead of contents, and do not derefer‐ ence symbolic links.?* will only state hidden files
ls -d .!(|.)
ठीक वही करता है जो ओपी ढूंढ रहा है ।
ls -ad .*
बैश में मेरे लिए काम करता है ।
यदि आप अपनी वर्तमान निर्देशिका में फ़ाइलें चाहते हैं (कोई पुनरावृत्ति नहीं), तो आप कर सकते हैं
echo .[^.]*
यह उन सभी फाइलों के नाम प्रिंट करेगा जिनका नाम एक से शुरू होता है .
और उसके बाद एक या अधिक गैर-डॉट वर्ण होते हैं । ध्यान दें कि यह उन फ़ाइलों के लिए विफल हो जाएगा जिनका नाम लगातार डॉट्स से शुरू होता है, इसलिए उदाहरण के लिए ....foo
नहीं दिखाया जाएगा ।
आप भी इस्तेमाल कर सकते हैं find
:
find -mindepth 1 -prune -name '.*'
द -mindepth
सुनिश्चित करता है कि हम मेल नहीं खाते .
और यह -prune
इसका मतलब है कि find
उपनिर्देशिकाओं में नहीं उतरेगा ।
का उपयोग करना find
और awk
,
find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
स्पष्टीकरण:
find . -type f
> -- वर्तमान निर्देशिका में सभी फ़ाइलों को सूचीबद्ध करें जैसे कि यह पथ है,
./foo.html./bar.html./.foo1
awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
/
फ़ील्ड सेपरेटर के रूप में एक डॉट के साथ घूरने वाले अंतिम फ़ील्ड के लिए एडब्ल्यूके चेक करता है या नहीं । यदि यह एक डॉट से शुरू होता है, तो यह उस संबंधित लाइन के अंतिम फ़ील्ड को प्रिंट करता है ।
find
आमतौर पर नाम ग्लोबिंग का उपयोग करने की तुलना में जटिल खोजों के लिए एक बेहतर विकल्प है ।
find . -mindepth 1 -maxdepth 1 -name '.*'
या
find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'
find .
खोजों वर्तमान निर्देशिका
-mindepth 1
बहिष्कृत करता है । और .. सूची से
-maxdepth 1
खोज को वर्तमान निर्देशिका तक सीमित करता है
-name '.*'
डॉट से शुरू होने वाले फ़ाइल नाम खोजें
-o
या
-name '*~'
फ़ाइल नाम खोजें जो एक टिल्ड के साथ समाप्त होते हैं (आमतौर पर, ये पाठ संपादन कार्यक्रमों से बैकअप फ़ाइलें हैं)
हालाँकि, यह और अन्य सभी उत्तर उन फ़ाइलों को याद करते हैं जो वर्तमान निर्देशिका में हैं .hidden
फ़ाइल। यदि आप एक स्क्रिप्ट लिख रहे हैं, तो ये पंक्तियाँ पढ़ेंगी .hidden
फ़ाइल और उन लोगों के फ़ाइल नाम प्रदर्शित करें जो मौजूद हैं ।
if [[ -f .hidden]] # if '.hidden' exists and is a filethen while read filename # read file name from line do if [[ -e "$filename" ]] # if the read file name exists then echo "$filename" # print it fi done < .hidden # read from .hidden filefi
मैं आप निम्न आदेश के साथ यह कर सकते हैं कि लगता है.
ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"
ls -a
आपके द्वारा दर्ज की गई कमांड, जो वर्तमान कार्यशील निर्देशिका में सभी फ़ाइलों और निर्देशिकाओं को दिखाती है ।
grep "^\."
कमांड मैंने जोड़ा, जो केवल छिपी हुई फ़ाइलों को दिखाने के लिए आउटपुट फ़िल्टर करता है(इसका नाम इसके साथ शुरू होता है "."
).
grep -v "^\.$" | grep -v "^\..$"
कमांड मैंने जोड़ा, जो आउटपुट को बाहर करने के लिए फ़िल्टर करता है । , ..(वे वर्तमान और मूल निर्देशिका हैं) ।
यदि कुछ फ़ाइल नामों में एक पंक्ति से अधिक हो सकते हैं "\n"
, उपरोक्त उदाहरण गलत हो सकता है ।
इसलिए मैं इस मुद्दे को हल करने के लिए कमांड का पालन करने का सुझाव देता हूं ।
find -maxdepth 1 -name ".[!.]*"
आप और क्या कर सकते थे, is ls .?*
या ls .!(|)
यह आपको वर्तमान डीआईआर छिपी हुई फाइलों/डीआईआर में शीर्ष पर और नीचे अन्य फाइलों/डीआईआर में सब कुछ दिखाएगा
जैसे: मेरे टर्मिनल से
$ ls .?* .bash_history .dmrc .macromedia .weather.bash_logout .gksu.lock .profile .wgetrc.bash_profile .bashrc.save .ICEauthority .toprc .Xauthority.bashrc .lastdir .viminfo .xsession-errors.bashrc~ .dircolors .lynxrc .vimrc .xsession-errors.old..:Baron.adobe:Flash_Player.aptitude:cache config.cache:compizconfig-1 rhythmboxdconf shotwell
अब उपरोक्त परिणामों में ध्यान दें, यह आपको हर फाइल/डीआईआर को उसके सबडिर और नीचे किसी भी छिपी हुई फाइल के साथ दिखाता है ।
[1:0:248][ebaron@37signals:pts/4][~/Desktop]$ ls .!(|).bash_aliases .bashrc1 .bashrc1~..:askapache-bash-profile.txt examples.desktop Public top-1m.csvbackups Firefox_wallpaper.png PycharmProjects top-1m.csv.zipDesktop java_error_in_PYCHARM_17581.log Shotwell Import Log.txt topsites.txtDocuments Music Templates VideosDownloads Pictures texput.log vmware
क्षमा करें, मैं टिप्पणी नहीं कर सकता । यहाँ के बीच अंतर समझाने के लिए ls .?*
और @ सिओबी 23 उत्तर ls -d .[!.]* .??*
और यह वास्तव में छिपी हुई फ़ाइलों को दो बार क्यों प्रिंट कर रहा है क्योंकि सचमुच आप दो बार पूछ रहे हैं .??*
, .?*
, .[!.]*
वे एक ही चीज हैं, इसलिए उनमें से किसी को भी अलग-अलग कमांड वर्णों के साथ जोड़ना दो बार प्रिंट होगा ।
दृष्टिकोण 1: ls -d .{[!.],.?}*
समझाएं: मैं बाहर करना चाहता हूं .
और ..
लेकिन फ़ाइल शामिल करें जैसे ..i_am_also_a_hidden_file.txt
ls -d .*
अवांछित रूप से दिखाता है .
और ..
ls -d .?*
(वर्तमान स्वीकृत उत्तर) अवांछनीय रूप से दिखाता है ..
ls -d .[!.]*
अवांछित रूप से नहीं दिखाएगा ..i_am_also_a_hidden_file.txt
ls -d .{[!.],.?}*
जवाब हैदृष्टिकोण 2: ls -A | grep "\\."
मैं व्यक्तिगत रूप से इस तरह से बेहतर पसंद करता हूं
आप भी उपयोग कर सकते हैं:
ls -d .[!.]* .??*
यह आपको सामान्य छिपी हुई फ़ाइलों और छिपी हुई फ़ाइलों को प्रदर्शित करने की अनुमति देगा जो उदाहरण के लिए 2 या 3 डॉट्स से शुरू होती हैं : ..hidden_file
एक सरल ’ रास-एलडी ।* ‘या’ एलएस-एएलडी ।* 'काम करेगा