Terminalde yalnızca gizli dosyalar nasıl gösterilir?

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

Komut ls -a gizli olanlar da dahil olmak üzere tüm dosyaları listeleyin, ancak yalnızca gizli dosyaları listelemem gerekiyor.

Hangi komutu kullanmalıyım?

Komut :

ls -ld .?* 

Yalnızca gizli dosyaları listeler.

Açıklamak :

 -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 .!(|.)

Tam olarak op'nin aradığı şeyi yapıyor.

ls -ad .*

Bash'ta benim için çalışıyor.

Dosyaları yalnızca geçerli dizininizde (özyineleme yok) istiyorsanız, şunları yapabilirsiniz

echo .[^.]*

Bu, adı a ile başlayan tüm dosyaların adlarını yazdırır. . ve bunu bir veya daha fazla nokta olmayan karakter izler. Bunun, adı ardışık noktalarla başlayan dosyalar için başarısız olacağını unutmayın, örneğin ....foo gösterilmeyecek.

Ayrıca kullanabilirsiniz find:

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

Bu -mindepth eşleşmememizi sağlar. . ve... -prune bunun anlamı find alt dizinlere inmeyecek.

Kullanım find ve awk,

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

Açıklama:

find . -type f> -- Geçerli dizindeki tüm dosyaları, yolu ile birlikte listeleyin,

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

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

/ alan ayırıcısı olarak awk, son alanın bir nokta ile bakıp bakmadığını kontrol eder. Bir nokta ile başlarsa, ilgili satırın son alanını yazdırır.

find genellikle karmaşık aramalar için isim küreciğini 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 arar

-mindepth 1 dışlıyor . ve.. listeden

-maxdepth 1 aramayı geçerli dizine sınırlar

-name '.*' nokta ile başlayan dosya adlarını bulma

-o veya

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

Ancak, bu ve diğer tüm yanıtlar geçerli dizinde bulunan dosyaları özlüyor .hidden dosya. Bir komut dosyası yazıyorsanız, bu satırlar aşağıdakileri okuyacaktır: .hidden dosya ve var olanların dosya adlarını görüntüler.

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

Bunu aşağıdaki komutla yapabileceğinizi düşünüyorum.

ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"

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

grep "^\." eklediğim komut, çıktıyı yalnızca gizli dosyaları gösterecek şekilde filtreler (Adı şununla başlar ".").

grep -v "^\.$" | grep -v "^\..$" eklediğim komut, çıktıyı hariç tutmak için filtreler., ..(Bunlar geçerli ve üst dizindir).

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

Bu yüzden sorunu çözmek için komutu takip etmenizi öneririm.

find -maxdepth 1 -name ".[!.]*"

Başka ne yapabilirdin, is ls .?* Veya ls .!(|) bu size üstteki geçerli dir gizli dosyalarındaki / dir'lerdeki ve aşağıdaki diğer dosyalardaki / dir'lerdeki her şeyi gösterecektir

örneğin: 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                              rhythmboxdconf                                       shotwell

Şimdi yukarıdaki sonuçlarda, alt dizini olan her dosyayı / dizini ve hemen altındaki gizli dosyaları gösterdiğine dikkat edin.

[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

Üzgünüm, yorum yapamam. arasındaki farkı açıklamak için ls .?* ve @cioby23 cevabı ls -d .[!.]* .??* Ve neden aslında gizli dosyaları iki kez yazdırıyor, çünkü kelimenin tam anlamıyla iki kez soruyorsunuz .??*, .?*, .[!.]* bunlar aynı şeydir, bu nedenle bunlardan herhangi birini farklı komut karakterleriyle eklemek iki kez yazdırılır.

Yaklaşım 1: ls -d .{[!.],.?}*

Açıkla: Hariç tutmak istiyorum . ve .. ancak aşağıdaki gibi bir dosya ekleyin ..i_am_also_a_hidden_file.txt

  1. ls -d .* istenmeyen gösteriler . ve ..
  2. ls -d .?* (geçerli kabul edilen cevap) istenmeden gösterir ..
  3. ls -d .[!.]* istenmeyen bir şekilde gösterilmeyecek ..i_am_also_a_hidden_file.txt
  4. ls -d .{[!.],.?}* cevap bu mu

Yaklaşım 2: ls -A | grep "\\."

Şahsen bu yolu daha çok seviyorum

Ayrıca şunları da kullanabilirsiniz:

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

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

Basit bir 'ls -ld .* ’ veya 'ls -ald .* ’ işe yarayacak