Yanıtlar:
Kullanabilirsiniz:
ls -d -- */
Tüm dizinler bittiğinden /
, bu sadece geçerli yoldaki dizinleri listeler. -D seçeneği yalnızca dizin isimleri, içeriklerini değil basılmış olmasını sağlar.
ls -d -- */
ve arasındaki fark nedir ls -d */
?
--
geleneksel olarak seçeneklerin sonunu işaretlemek için kullanılır, böylece bir dosya -l
ls olarak adlandırılırsa , onu uzun liste formatı seçeneği olarak yorumlamaz.
Stephen Martin'in cevabı bir uyarı verdi ve mevcut klasörü de listeledi, bu yüzden öneriyorum
find . -mindepth 1 -maxdepth 1 -type d
(Bu Linux'ta; bulmak için POSIX man sayfasında -maxdepth ve -mindepth'i bulamadım)
ls -d -- */
, find
gizli yönetimleri de bulacağı gibi bu seçeneği seviyorum. Bu bazen yararlı olabilir, ancak bazen de sorunlara neden olabilir. Umarım bu yorum başkalarına yardımcı olabilir. +1
Daniel'in cevabı doğru. İşte bazı yararlı eklemeler olsa da.
Gizli klasörleri listelemekten kaçınmak için .git
, şunu deneyin:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \)
Ve bazı ortamlarda, çıkışın başlangıcındaki korkutucu nokta eğrisini değiştirmek için şunufind
kullanın:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \) | sed 's|^\./||g'
Sen, onun çıktısını çözümlememelisin, demiştin, ya da öyle söylenir. Bunun arkasındaki sebep, çıktının insan tarafından okunabilir olması ve hatırlatırsam ayrıştırmayı gereksiz yere karmaşık hale getirmesidir.
ls veya bulmak istemiyorsanız, "*" ile "[-d]" öğesini filtrelemeyi deneyebilirsiniz.
Ben sadece bunu yaptım, bir sebepten dolayı işe yaramadı ve bulmadım (sanırım boşlukları ve parantezleri olan dosya isimleri, ya da göz ardı ettiğim başka bir şey), sonra da çizgileri boyunca bir şeyler yaptım
for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done
Glob kalıp seçiminde beni şaşırtan bir şeyi vurgulamak için; buna sahip olduğunuzu söyleyin:
$ cd /tmp
$ mkdir testglob
$ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done
$ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done
$ tree testglob/
testglob/
├── mydir_00
├── mydir_00.txt
├── mydir_01
├── mydir_01.txt
├── mydir_02
├── mydir_02.txt
├── mydir_03
├── mydir_03.txt
├── myfile_00
├── myfile_01
├── myfile_02
├── myfile_03
├── otherdir_00
├── otherdir_01
├── otherdir_02
└── otherdir_03
8 directories, 8 files
Yani, burada sadece mydir*
dizinleri seçmek istediğinizi söyleyin . Sona eren eğik çizgiden çıkarsanız, ls -d
dosyaları da listeleyeceğini unutmayın:
$ ls -d testglob/mydir* # also `ls -d -- testglob/mydir*`
testglob/mydir_00 testglob/mydir_01 testglob/mydir_02 testglob/mydir_03
testglob/mydir_00.txt testglob/mydir_01.txt testglob/mydir_02.txt testglob/mydir_03.txt
... ancak, sonlanan eğik çizgiyle birlikte, yalnızca dizinler listelenir:
$ ls -d testglob/mydir*/ # also `ls -d -- testglob/mydir*/`
testglob/mydir_00/ testglob/mydir_01/ testglob/mydir_02/ testglob/mydir_03/
printf "%s\n" */
$ PWD içindeki tüm dizinleri listeleyecektir.
echo */
aynı zamanda çalışacak, ancak uzun bir satırda, adların boşlukları varken daha zor.
Ayrıca kullanabilirsin:
du
Veya:
git ls-tree -d -r --name-only @