Odpowiedzi:
Nie ma nic wbudowanego do znalezienia, nawet GNU find. Możesz przetworzyć dane wyjściowe w findcelu sortowania według liczby ukośników, na przykład za pomocą Perla:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<> jest listą wszystkich linii wejściowych;$a =~ s!/!/!gto liczba ukośników $a, których używamy jako kryterium sortowania.Jeśli możesz użyć zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/* wyświetla wszystkie pliki w bieżącym katalogu i podkatalogach.oekontroluje kolejność zwracania dopasowań: są one sortowane według wartości REPLYpo uruchomieniu kodu tutaj w cudzysłowach dla każdego dopasowania z REPLYpoczątkowo ustawioną zgodną ścieżką.$REPLYaby usunąć wszystko oprócz ukośników. Wynik składa się ze wszystkiego na głębokości 1 (wynik pusty $REPLY), a następnie wszystkiego na głębokości 2 ( $REPLYkończy się na /), głębokości 3 ( //) itp.nie
Przejdź do tego pytania na temat SO w celu obejścia tego problemu.
Mam wrażenie, że możesz. Obejmuje grep i takie oraz pętlę, ale uważam, że działa bardzo dobrze, szczególnie w twoim przypadku, że znalezienia nie trzeba uzupełniać.
Jest bardziej zasobochłonny z powodu:
Jest to dobre, ponieważ:
#! / bin / bash
głębokość = 0
podczas szukania -mindepth $ głębokość -maxdepth $ głębokość | grep ”.”
robić
głębokość = $ ((głębokość + 1))
gotowy
Możesz również łatwo dopasować go do jednej linii dość (?):
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Ale wolę małe skrypty niż pisanie ...