'Ls' komutu ile sadece dizinleri görebileceğim bir seçenek var mı?


74

Bazen dosyaları değil sadece dizinleri kontrol etmem gerekir. Ls komutuyla ilgili bir seçenek var mı? Veya bunu yapmak için herhangi bir yarar var mı?

EDIT : Mac OS X kullanıyorum ve dizinlerim olsa ls -dda bana veriyor ..


4
Birisi neden ls -dsadece verdiğini .ve */çalışmasını sağlamak için neden sonuna eklenmesi gerektiğini açıklayabilir ?
cwd

3
@cwd Herhangi bir dosya belirtmezseniz, lsvarsayılan olarak .. Ve -daraçları, dizinin içeriğini yazdırmak dizinin kendisini baskı yoktur.
Mikel

1
kullanmayı deneyin @cwd ls -pgösterir /dizin adlarının sonra. Yani */sadece dizin adı ve /açılan ile eşleşen bir kalıptır .
Pitt

@ Steven_D'nin ~ / .bash_aliases dosyamın cevabını uygulayan bir fonksiyon yarattım: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

Yanıtlar:


84

Seçilmiş bir cevabın zaten olduğunu biliyorum, ancak istenen davranışı yalnızca ls:

ls -ld -- */

('-' parametresinin sonunu işaretleyerek, kısa çizgi ile başlayan klasör adlarının başka komut seçenekleri olarak yorumlanmasını önlediğini unutmayın.)

Bu, tüm gizli olmayanları (kabuğunuzun küreğini genişletecek şekilde yapılandırmadıkça) çalıştırıldığı geçerli dizindeki dizinleri listeleyecektir (dizinlere sembolik bağlantılar içerdiğini de unutmayın). Başka bir klasörün tüm alt dizinlerini almak için şunu deneyin:

ls -ld /path/to/directory/*/

-L'nin isteğe bağlı olduğunu unutmayın.


5
Güzel. Dizinlerin /sonunda bir çıkarım olduğunu düşünmedim - ama şimdi cevapladığını görüyorum ki bu mantıklı geliyor. Sonuçta, sekme tamamlama her zaman ekler.
gvkv

-d for dir, -l for long format. amacı --nedir
Dineshkumar

1
Bu kısa görünse ve çoğu durumda işe yarasa da, gerçek bir dizin gerektiğinde, bir direktörün bağlantısına değil, bu yaklaşımı kullanmak istemeyebilirsiniz. Yani findbu durumda aslında iyi bir seçimdir.
biocyberman

1
findAyrıca, dizin sayısı azami argüman uzunluğunu aştığında da avantaj sağlar.
Steven D,

Geriye çalışarak, sadece basitçe bir uzantısı ile bir şey yok sayabilirsiniz gerçekleşmiştir: ls -alhF --ignore=*.*. Bunun 'gizli' klasörleri ne kadar iyi idare edeceğinden emin .myHiddenFolder
değilsiniz

14

Hayır, ama basit bir findkomut yapacak:

find . -type d -depth 1

veya grep

ls -F | grep /

Gerekirse her ikisine de takma ad atabilirsiniz.


6
Ubuntu 14.04 tarihinde öyleydi -maxdepth 1. Ayrıca findemri find . -maxdepth 1 -type d
çevirmemi

Bu ls -F | grep /çözüm harikalar yaratıyor! FreeBSD makinemde çalışabileceğim tek kişi gibi görünüyor. Balık kullanmanın hiçbir şeyin */işe yaramayabileceği anlamına geldiğini düşünüyorum ?
cjm

Fish ile hiç çalışmadım, bundan emin değilim ama -F seçeneği harikalar yaratabilir.
gvkv

7

Ağaç yardımcı programının dizin yapısına genel bir bakış edinmesini seviyorum . MacPorts ve denedim tüm Linux dağıtımlarında kullanılabilir.

tree -d -L 2

Bu, tüm dizinleri gösterir, iki seviye derin.


6

Ayrıca gizli dizinleri de görmem gerekiyordu, bu yüzden yukarıdaki önerimi benim gereksinimlerime uyacak şekilde değiştirdim

ls -d -- */ .*/

(kabuk bağlı olarak, bu da içerebilir .ve ..)


2

İle zsh(MacOS üzerinde varsayılan olarak bulunduğu gibi, hatta eskiden /bin/shorada), onların türüne göre dosyaları seçmek için glob eleme kullanırsınız:

  • Gizli olmayan dizinleri listele:

    ls -d -- *(/)
    
  • Tüm dizinleri listele:

    ls -d -- *(D/)
    

    ( .ve ..istediğiniz zaman hariç tutulur, isterseniz onları ayrı ayrı ekleyin)

  • Ayrıca dizinlere sembolik bağlantılar ekleyin:

    ls -d -- *(D-/)
    

    ( -Böylece, niteleyicilerin sembolik bağlantı çözümünden sonra geçerli olmalarını sağlar).


-1

Sanırım Mac OS X'te bir hata var. Bir geçici çözüm grep kullanmak ... ls -l / | grep "^d"


1
Ben kullanan tek insan değilim bilmek güzel grep "^d"hack
Michael Mrozek

6
Bildiğim kadarıyla, tarif ettiği davranış bir hata değil ve GNU ls kullanıyorsa aynıdır. -D seçeneği, içeriği değil dizinin listesini görüntüler. Bu yararlı olabilir neden görmek için arasındaki farkı görmek: ls -l /homevels -dl /home
Steven D

Karatlar kabuk için özel değildir. Sadece kullanabilirsin ls -l / | grep ^d. Eğer varsa vardır parametre genişleme gerekmez çünkü, tırnak kullanabilirsiniz onları yapacağım tek tırnak. ls -l / | grep '^d'. Evet, ben bir bilgiliyim. Ama gerçekten, bunu yap. :)
Wildcard

-1
$ ls -p | grep /

Bu dosya bir dizinse -pbayrak lsher dosya adından sonra bir eğik çizgi (`/ ') ekleyecektir.


-2

En kolay yol şu komutu yazmaktır. Bu, çoğu UNIX ve Linux platformunda ve sürümünde çalışır. İsterseniz atlayabilirsiniz -F, ancak dizin adının sonuna / ekleyen argümandır. -CArgümanı sadece dizin isimleri yakalar - hepsi geçerli dizinde. Sadece geçerli yoldaki dizinleri ve alt dizinleri görmek istiyorsanız, sadece -Rargümanı ( ls -CFR) ekleyin .

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 

1
Toplamda lsuygulamaları bildiğim ve POSIX şartnamede ls, -Ciçinde çıkışa olan sütunlar dizin olmayan dosyaları atlamak için değil. Örnekte, /hiçbir lsuygulamanın yapamayacağı dosya adlarından önce yazdırılır . İle -F, /dizin dosyaları için dosya adına eklenir.
Stéphane Chazelas

Bu cevabı gördüğümde, “Bu nerede doğru?” Diye merak ediyordum.
G-Man

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.