Geçerli dizinin alt dizinlerini listelemenin doğru bir yolu var mı?


10

Bir dizinin alt dizinlerini

ls -d -- */

veya

ls -l | grep "^d"

ama her ikisi de dolaylı görünüyor ve sadece dizinleri bulmak için standart bir yol olacağını hayal ediyorum. Bunu yapmanın doğru bir yolu var mı? Ve eğer değilse, bunlardan herhangi biri uç vakalarda istenmeyen davranışlara yol açacak mı? (Sembolik bağlantılar, gizli dizinler, vb.)

Yanıtlar:


17

Cevap, aradığınız şeyden çok çıktıyla ne yapmak istediğinize bağlı olacaktır . Terminalde görsel referans için bir liste görmek istiyorsanız, ilk çözümünüz aslında oldukça güzel. Çıktıyı işlemek istiyorsanız başka bir yöntem kullanmayı düşünmelisiniz.

Bir listeyi başka bir programa aktarmak için en sağlam yollardan biri kullanmaktır find.

find -maxdepth 1 -type d

Bunun beslemeler için iyi olmasının nedeni, findkullanarak -print0başka bir programa argüman olarak null'ları ayırarak veya düzgün bir şekilde dizelerden çıkabilmesidir -exec. Bunun neden ls çıktısını ayrıştırmaktan daha iyi olduğuna ilişkin bilgi için Greg'in Wiki'sinde ParsingLS konusuna bakın .


4
Bunu find . -maxdepth 1 -type dOS X Yosemite üzerinde çalışmak için yazmak zorunda kaldım.
Sean Levin

1
alt dizinleri listelemek için, -mindepth öğesini de olduğu gibi belirtmek gerekir find . -maxdepth 1 -mindepth 1 -type d. Aksi takdirde, geçerli dizin .dahil edilecektir.
tinlyx

5

FYI - ZSH'de (ancak BASH değil), bunu da yapabilirsiniz ls -d -- *(/):; değiştirici sadece glob dizinlere zsh söyler.(/)

Bununla birlikte, kendi önerilen çözümünüzden ( ls -d -- */) çok farklı değildir ve standarttan çok uzaktır.

ls(Muhtemelen diğer bayraklara göre farklılık gösteren) çıktısına göre:

% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2

zsh, yıldız işaretini tüm dosyalara ve dizinlere genişletir, (/) bayrağı bu genişlemenin bölümlerini seçer, böylece ls * (/) de yankı * (/) veya daha zshly bir yolla yazdır -l * (/ ) . İlk iki sürüm bash'da da çalışır.
Thor

1
O Not *(/)olmayan gizli dizinlere genişlediğinde ise */dizinlere olmayan gizli dizinleri veya sembolik için genişletildiği (veya yollara azından sembolik olarak hangi biz onlar dizinleri olduğu söyleyebilir).
Stéphane Chazelas
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.