टर्मिनल में केवल छिपी हुई फ़ाइलों को कैसे दिखाएं?

मेरे पास एक निर्देशिका है जिसमें हजारों फाइलें हैं, उनमें से कुछ छिपी हुई हैं ।

आदेश 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

  1. ls -d .* अवांछित रूप से दिखाता है . और ..
  2. ls -d .?* (वर्तमान स्वीकृत उत्तर) अवांछनीय रूप से दिखाता है ..
  3. ls -d .[!.]* अवांछित रूप से नहीं दिखाएगा ..i_am_also_a_hidden_file.txt
  4. ls -d .{[!.],.?}* जवाब है

दृष्टिकोण 2: ls -A | grep "\\."

मैं व्यक्तिगत रूप से इस तरह से बेहतर पसंद करता हूं

आप भी उपयोग कर सकते हैं:

ls -d .[!.]* .??*

यह आपको सामान्य छिपी हुई फ़ाइलों और छिपी हुई फ़ाइलों को प्रदर्शित करने की अनुमति देगा जो उदाहरण के लिए 2 या 3 डॉट्स से शुरू होती हैं : ..hidden_file

एक सरल ’ रास-एलडी ।* ‘या’ एलएस-एएलडी ।* 'काम करेगा