Yanıtlar:
ls -d */Geçerli dizindeki dizinleri listelemek için bunu deneyin
ls -al | grep '^d'alırdım - bu çok daha özlü.
*/sadece bir eğik çizgi ile biten öğelerin görüntülenmesini zorlar biliyorum, bu durumda bir -Fseçenek olurdu bile, bu durumda bir dizin olacaktır ls. Bir dizinde ls *phpbiten tüm dosyaların davranışına ve nasıl görüntülendiğine benzer php.
echo */aynısını yapacağız
Bunu dene:
find . -maxdepth 1 -type d
lsçözümlerin aksine find, sadece işi yapmaktan sorumludur (sınırlar getirebilen kabuk joker karakter genişletmesine güvenmemek). Aynı zamanda çok daha özlü.
find * -maxdepth 0 -type d.
findklasörleri derinlik 1'de veren ancak çıktı veren tam özyinelemeli arama yapıyor gibi görünüyor .
Devamındaki
find * -maxdepth 0 -type d
temel olarak '*' ifadesinin genişlemesini, yani geçerli dizindeki tüm girişleri -type dkoşullara göre filtreler .
Avantajı, çıktı ile aynıdır ls -1 *, ancak sadece dizinlerle ve girdiler bir nokta ile başlamaz
Sen kullanabilirsiniz ls -d */veyatree -d
Başka bir çözüm globbing olurdu, ancak bu kullandığınız kabuğa ve dizinler için globbing'in desteklenip desteklenmediğine bağlıdır.
Örneğin ZSH:
zsh # ls *(/)
tree?
tree(depolarda olmasına rağmen) varsayılan olarak yüklü değil.
treeyerel bir unix komutu olmadığına inandığım için aşağıya oy verin (yanlışsam lütfen beni düzeltin).
Bunu yapmanın onlarca yolu olduğundan, işte bir tane daha:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
Bir takma ad oluşturabilir ve profil dosyasına koyabilirsiniz
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
bir dizin listesi almak için bunu kullanın
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
Alt dizinlerde yinelemek istemiyorsanız, bunun yerine bunu yapabilirsiniz:
find specifiedpath -type d -mindepth 1 -maxdepth 1
"Adı" ile başlayan "nokta" dizinlerinin .de listeleneceğini unutmayın; ama özel dizinler .de değil ... Eğer "nokta" dizinleri istemiyorsanız, sadece grepdışarı çıkarabilirsiniz :
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepthiçin oy verin .! 😁
Cevap kabuğunuza bağlı olacaktır .
In zshÖrneğin, aşağıdakileri yapabilirsiniz:
echo *(/)
Ve geçerli çalışma dizinindeki tüm dizinler görüntülenecektir.
Daha man zshexpnfazla bilgi için bakınız .
find(1)Çoğu Unix aroması üzerinde çalışması gereken alternatif bir yaklaşım kullanmak olacaktır :
find . -maxdepth 1 -type d -print
find(1)birçok kullanımı vardır, bu yüzden kesinlikle tavsiye ederim man find.
Bunu gerçekleştirmek için treekomutu danahtarıyla birlikte kullanabilirsiniz .
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
man treedaha fazla bilgi için bakınız .
tree. Ah, niyetim kimsenin gök gürültüsünü çalmak değildi.
Bu dizine sahipsem:
ls -l
lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga
-rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter
-rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log
-rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz
drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp
Tüm dizinleri almak için -L komutunu kullanarak bağlantıları çözün:
ls -lL | grep '^d'
drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
-L olmadan:
ls -l | grep '^d'
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
conf_nagios dizini eksik.
Bu benim için çalışıyor:
`ls -F | grep /`
(Ama echo */@nos tarafından belirtildiği gibi geçiyorum)
Bağlantılı dizinleri gösteren başka bir çözüm. Biraz tercih ederim çünkü "normal" ls -l çıktı bir alt kümesi:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
Bash'da:
ls -d */
Tüm dizinleri listeler
ls -ld */
tüm dizinleri uzun biçimde listeler
ls -ld */ .*/
gizli dizinler dahil tüm dizinleri uzun biçimde listeler.
Son zamanlarda zsh (MacOS Catalina) geçti ve buldum:
ls -ld */ .*/
Artık çalışmıyor eğer geçerli dizin hiçbir gizli dizinleri içerir.
zsh: no matches found: .*/
Yukarıdaki hatayı yazdıracak, ancak herhangi bir dizin yazdırılamayacak.
ls -ld *(/) .*(/)
Aynı şekilde başarısız olur.
Şimdiye kadar bunu buldum:
ls -ld */;ls -ld .*/
iyi bir çözümdür. Bu ;bir komut ayırıcıdır. Ancak, gizli dizin yoksa, dizinleri listeleyeceği ve hala gizli dizinler için hatayı yazdıracağı anlamına gelir:
foo
bar
zsh: no matches found: .*/
lsgeçerli dizinin liste içeriğinin kabuk komutu
-lLongford'da listelemek istediğiniz işarettir (satır başına bir öğe + bir dizi diğer serin bilgi)
-dtüm dizinleri "dosya" olarak listeleyen ve özyinelemeli olmayan işarettir
*/. 'eğik çizgi ile biten tüm dosyaları listele' argümanı
* "herhangi bir şey" için basit bir normal ifade komutudur, bu nedenle */kabuktan "/" ile biten her şeyi listelemesini ister
Görmek man lsfazla bilgi için .
Bunu koydum:
alias lad="ls -ld */;ls -ld .*/"
benim .zshrc, ve iyi çalışıyor gibi görünüyor.
NOT: Bunu da keşfettim
ls -ld .*/ 2> /dev/null
terminale sterr yazdırdığı için çalışmıyor. Bir çözüm bulduğumda / bulduğumda cevabımı güncelleyeceğim.
Dizinlerin uzun listesi
Liste dizinleri
- ls -d * /