Terminalde sadece gizli dosyaları nasıl gösteririm?

106

Binlerce dosya içeren bir dizinim var, bazıları gizli.

% co_de komutu, gizli dosyalar da dahil olmak üzere tüm dosyaları listeler, ancak yalnızca gizli dosyaları listelemeye ihtiyacım var.

Hangi komutu kullanmalıyım?

    
sordu nux 19.05.2014 02:10

10 cevap

133

Komut:

ls -ld .?* 

Sadece gizli dosyaları listeler.

Açıklayın:

 -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 
    
verilen cevap nux 19.05.2014 02:10
28
ls -d .!(|.)

OP'nin tam olarak ne arıyor.

    
verilen cevap patrick 19.05.2014 06:52
13

Sadece mevcut dizininizdeki dosyaları (yineleme olmadan) istiyorsan, yapabilirsin

echo .[^.]*

Bu, adı . ile başlayan ve bir veya daha fazla nokta dışı karakterle izlenen tüm dosyaların adlarını yazdıracaktır. Bunun adı ardışık noktalarla başlayan dosyalar için başarısız olacağını unutmayın, örneğin ....foo gösterilmeyecektir.

Ayrıca find kullanabilirsiniz:

find -mindepth 1 -prune -name '.*'

-mindepth , . ile eşleşmemizi ve -prune 'si find ' nin alt dizinlere indirilmemesini sağlar.

    
verilen cevap terdon 19.05.2014 04:57
11
ls -ad .*

Bash’de benim için çalışıyor.

    
verilen cevap Mark 19.05.2014 06:55
4

find ve awk değerini kullanma

find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

Açıklama:

find . -type f - & gt; Şu anki dizindeki tüm dosyaları yol gibi listeleyebilir,

./foo.html
./bar.html
./.foo1

awk -F"/" '$NF ~ /^\..*$/ {print $NF}'

Alan ayırıcı olarak / awk, bir noktaya bakarak son alanın olup olmadığını kontrol eder. Bir nokta ile başlarsa, o karşılık gelen satırın son alanını yazdırır.

    
verilen cevap Avinash Raj 19.05.2014 04:46
3

find genellikle karmaşık aramalar için ad globbing kullanmaktan daha iyi bir seçenektir.

find . -mindepth 1 -maxdepth 1 -name '.*'

veya

find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'

find . geçerli dizini arıyor

-mindepth 1 öğesi hariç. ve .. listeden

-maxdepth 1 , aramayı geçerli dizine sınırlıyor

-name '.*' , bir nokta ile başlayan dosya adlarını bulur

-o veya

-name '*~' , tilde ile biten dosya adlarını bulur (genellikle, bunlar metin düzenleme programlarından gelen yedek dosyalardır)

Ancak, bu ve diğer tüm cevaplar mevcut yöneticinin .hidden dosyasında bulunan dosyaları özlüyor. Bir komut dosyası yazıyorsanız, bu satırlar .hidden dosyasını okuyacak ve mevcut olanların dosya adlarını görüntüleyecektir.

if [[ -f .hidden]] # if '.hidden' exists and is a file
then
    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 file
fi
    
verilen cevap Mark H 19.05.2014 23:24
2

Aşağıdaki komutu kullanarak yapabileceğinizi düşünüyorum.

ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"
Girdiğiniz

ls -a komutunu, geçerli çalışma dizinindeki tüm dosyaları ve dizinleri gösterir.

Eklediğim grep "^\." komutunu, yalnızca gizli dosyaları gösterecek şekilde filtreleyen filtreler (Bu isim "." ile başlıyor).

Eklediğim

grep -v "^\.$" | grep -v "^\..$" komutunu ekledim, çıktısını filtreleyecek., (Geçerli ve üst dizin).

Bazı dosya adlarının "\n" ile bir satırdan daha fazlasına sahip olması durumunda, yukarıdaki örnek yanlış olabilir.

Bu yüzden sorunu çözmek için şu komutu tavsiye ediyorum.

find -maxdepth 1 -name ".[!.]*"
    
verilen cevap xiaodongjie 19.05.2014 04:00
2

Başka neler yapabiliyordunuz, is ls .?* Ya da ls .!(|) size şu anki direkteki gizli dosyalar / direklerdeki ve aşağıdaki diğer dosyalar / direklerdeki her şeyi gösterecek

e.g: terminalimden

$ 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                              rhythmbox
dconf                                       shotwell

Şimdi yukarıdaki sonuçlara dikkat edin, alt dizinine ve aşağıdaki gizli dosyalara sahip her dosya / dizin gösterir.

[1:0:248][[email protected]:pts/4][~/Desktop]
$ ls .!(|)
.bash_aliases  .bashrc1  .bashrc1~

..:
askapache-bash-profile.txt  examples.desktop             Public           top-1m.csv
backups             Firefox_wallpaper.png        PycharmProjects          top-1m.csv.zip
Desktop             java_error_in_PYCHARM_17581.log  Shotwell Import Log.txt  topsites.txt
Documents           Music                Templates            Videos
Downloads           Pictures                 texput.log           vmware

Üzgünüz, yorum yapamıyorum. ls .?* ile @ cioby23 ls -d .[!.]* .??* arasındaki farkı açıklamak için Ve neden aslında gizli dosyaları iki kez yazdırıyorsunuz, çünkü tam olarak iki kez .??* , .?* , .[!.]* soruyorsunuz. Bu nedenle, farklı komut karakterleriyle herhangi birini eklemek iki kez yazdırır.

    
verilen cevap amrx 19.03.2015 06:47
1

Ayrıca şunları kullanabilirsiniz:

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

Bu, normal gizli dosyaları ve 2 veya 3 noktayla başlayan gizli dosyaları görüntülemenizi sağlar. Örneğin: ..hidden_file

    
verilen cevap cioby23 19.05.2014 07:05
1

komutu kullanabilirsiniz

ls -Ad .??*

Bu, ls -a | grep "^\." çözümlerinde grep tabanlı yaklaşımdan farklı olarak çok sütunlu listelemeye izin verme avantajına sahiptir

    
verilen cevap Maythux 06.05.2015 17:46

Etiketlerdeki diğer soruları oku