Yanıtlar:
Bulmak için yerleşik bir şey yok, hatta GNU buluyor. find
Eğik çizgi sayısına göre sıralamak için çıktısını sonradan işleyebilirsiniz , örneğin Perl ile:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
tüm girdi satırlarının listesidir;$a =~ s!/!/!g
$a
sıralama ölçütü olarak kullandığımız eğik çizgi sayısıdır .Eğer zsh kullanabiliyorsanız:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
geçerli dizindeki ve alt dizinlerdeki tüm dosyaları listeler.oe
, eşleşmelerin döndürülme sırasını kontrol eder: başlangıçta eşleşen yola ayarlanmış olan REPLY
her bir eşleşme için koda burada koyduktan sonraki değere göre sıralanır REPLY
.$REPLY
eğik çizgiler hariç her şeyi silmek için dönüşür . Sonuç, derinlik 1'deki her şeyden (boş sonuç $REPLY
), sonra derinlik 2'deki ( $REPLY
biter /
), derinlik 3 ( //
) vb.Benim hislerim yapabiliyorsun. Grep ve benzeri bir döngü içerir, ancak özellikle tamamlamanız gerekmeyen bulmayla ilgili durumunuz için çok iyi çalıştığını düşünüyorum.
Aşağıdakiler nedeniyle kaynak yoğunluğu daha fazladır:
Bu iyi çünkü:
#! / Bin / bash derinlik = 0 -mindepth $ derinliği bulmak -makinepth $ derinliği | grep '.' yapmak derinlik = $ ((derinlik + 1)) tamam
Ayrıca bir satıra kolayca (?) Kolayca sığdırabilirsiniz:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Ama yazarken küçük scriptleri tercih ediyorum ...