Piszę skrypt to ksh. Musisz znaleźć wszystkie nazwy katalogów bezpośrednio w bieżącym katalogu, które zawierają tylko pliki, a nie podkatalogi.
Wiem, że mogłem użyć ls -alR
i rekursywnie przeanalizować dane wyjściowe dla pierwszej litery w pierwszym polu ( d
dla katalogu). Myślę, że awk
to najlepszy sposób na parsowanie i znajdowanie.
Na przykład proste ls -al
wyjście w bieżącym katalogu:
drwxr-xr-x 22 af staff 748 18 Mar 22:21 .
drwxr-xr-x 5 root admin 170 17 Mar 18:03 ..
-rw------- 1 af staff 3 17 Mar 16:37 .CFUserTextEncoding
drwxr-xr-x 5 af staff 170 17 Mar 17:12 Public
drwxr-xr-x 9 af staff 306 18 Mar 17:40 Sites
-rw------- 1 af staff 3 17 Mar 16:37 textd
…
Dane wyjściowe zawierają 2 katalogi: Public
i Sites
. Katalog Public
nie zawiera podkatalogów, ale Sites
zawiera. Istnieją 3 podkatalogi w Sites
. Muszę więc powtórzyć tylko te katalogi, które nie zawierają w sobie katalogów. W moim przypadku jest to tylko Sites
.
/some/directory
ma i-węzeł # 12345678, jeśli nie ma podkatalogów, będą dokładnie 2 twarde linki do tej i-węzły:/some/directory/.
i/some/directory
. Działa niezależnie od tego, czy w katalogu znajdują się jakieś pliki..
ifoo/..
mają ten sam numer i-węzła).*/
pasuje do podkatalogów bieżącego katalogu. Obejmuje to symboliczne linki do katalogów, których możesz chcieć lub nie.W ksh93 dodanie
~(N)
na początku wzoru powoduje rozwinięcie go do pustej listy, jeśli nie ma dopasowania. Bez tego wzorzec pozostaje niezmieniony, jeśli nie ma dopasowania.Poniższa funkcja ksh93 wyświetla podkatalogi bieżących katalogów, które nie zawierają żadnego podkatalogu ani łącza do katalogu.
źródło
jeśli cię nie rozumiem, chcesz tylko znaleźć pliki w katalogu, a nie w podkatalogach. Jeśli taki jest twój zamiar, oto rozwiązanie
jeśli chcesz znaleźć inne niż zwykłe pliki (takie jak pliki urządzeń blokowych, pliki urządzeń znakowych itp.), przejdź do strony man dla
find
polecenia i poszukaj słowa kluczowego type na tej stronie. Zobaczysz różne typy plików, w tym zwykłe pliki i katalogi itp.Mam nadzieję, że tego właśnie szukasz
źródło