Yanıtlar:
İlk durumda, ls'e bir dizin veriyor ve içeriğini göstermeyi istiyorsun.
İkinci durumda, zaten veriyoruz ls doğrudan (bireysel dosyalar ve alt dizin listesini) içeriğini ve bu öğeleri ama tam olarak göstermek isteyen değil onların ileri içeriği.
Onlar çünkü Yani bu aynı çıktıyı vermek do eski vaka dışında, hemen hemen aynı şeyi ls kendisini ikinci durumda bunu önceden belirlenmiş bir liste veriyoruz ederken, göstermek için gerekenleri içeriği belirler.
Ls iki mod vardır: bir dosya verildiğinde, sadece o dosyayı gösterir; Bir dizin verildiğinde, bu dizinin içeriğini gösterir (bir seviye derinlikte).
Sizin /example
bir dizin, yani kullandığınızda ls /example
, ls içeriğini gösterecektir. -d
Seçeneği bu davranışı devre dışı bırakır ve yapar ls hep bir dosya var olsun veya olmasın, sadece madde verilmiş göstermektedir.
(Karşılaştır: ls -l /etc
ve ls -l -d /etc
)
Ancak kullandığınızda ls -d /example/*
, bir dizini göstermesini istemiyorsunuz - göstermesi için ayrı öğelerin bir listesini veriyorsunuz . Joker karakterler, komut çalıştırılmadan önce kabuğunuz tarafından genişletilir, yani gerçekten çalıştırdığınız şey budur ls -d /example/file1 /example/file2 /example/file3
.
Bir argüman ls
bir dizin olduğunda, dizine ls
girer ve çağrılmadığı sürece dizin içeriğini listeler -d
. Dosya adı genişletme işleminin ('file *') ls çağrılmadan önce kabukta yapıldığını unutmayın.
dir
├── file1
└── subdir
└── file2
ls dir
içeriğini listeler dir
(bir satır için file1
, bir satır için subdir
)ls -d dir
sadece listeler dir
(tek bir satırda)ls dir/*
için genişletilir ls dir/file1 dir/subdir
ve bu nedenle subdir
içeriğini listelemek için genişler .ls -d dir/*
şekilde genişletilir ls dir/file1 dir/subdir
, ancak nedeniyle -d
subdir
genişletilmiş ve sadece değil file1
ve subdir
listelenmiştir (bu nedenle ilk örneğinde olduğu gibi aynı çıktıyı almak).