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?
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
ls -d .*
istenmeyen gösteriler .
ve ..
ls -d .?*
(geçerli kabul edilen cevap) istenmeden gösterir ..
ls -d .[!.]*
istenmeyen bir şekilde gösterilmeyecek ..i_am_also_a_hidden_file.txt
ls -d .{[!.],.?}*
cevap bu muYaklaşı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