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 -F
seçenek olurdu bile, bu durumda bir dizin olacaktır ls
. Bir dizinde ls *php
biten 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
.
find
klasö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 d
koş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.
tree
yerel 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 grep
dışarı çıkarabilirsiniz :
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepth
iç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 zshexpn
fazla 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 tree
komutu d
anahtarıyla birlikte kullanabilirsiniz .
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
man tree
daha 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: .*/
ls
geçerli dizinin liste içeriğinin kabuk komutu
-l
Longford'da listelemek istediğiniz işarettir (satır başına bir öğe + bir dizi diğer serin bilgi)
-d
tü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 ls
fazla 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 * /