Odpowiedzi:
Nie ma nic wbudowanego do znalezienia, nawet GNU find. Możesz przetworzyć dane wyjściowe w find
celu 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!/!/!g
to 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.oe
kontroluje kolejność zwracania dopasowań: są one sortowane według wartości REPLY
po uruchomieniu kodu tutaj w cudzysłowach dla każdego dopasowania z REPLY
początkowo ustawioną zgodną ścieżką.$REPLY
aby 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 ( $REPLY
koń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 ...