Próbuję uzyskać listę katalogów, które są zawarte w określonym folderze.
Biorąc pod uwagę te przykładowe foldery:
foo/bar/test
foo/bar/test/css
foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI
Chciałbym polecenia, które zwróci:
XYZ
ABC
DEF
GHI
Zasadniczo szukam folderów wewnątrz wp-content / plugins /
Używanie find
sprawiło, że jestem najbliżej, ale nie mogę używać -maxdepth
, ponieważ folder jest zmiennie oddalony od miejsca, w którym szukam.
Uruchomienie następującego zwraca rekursywnie wszystkie katalogi potomne.
find -type d -path *wp-content/plugins/*
foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI
?
. W przypadku bash (jak zaznaczono w pytaniu) to działa .find
implementacje, które generują?
znak zastępczy lub dowolny znak zastępczy, lub dowolną formę zmiany znaczenia znaków niedrukowalnych, robią to tylko wtedy, gdy dane wyjściowe trafiają do terminala, a nie do potoku takiego jak tutaj.sed
/awk
że wszystkie pliki są w linii. Teraz można argumentować, że uzyskanieABC?BCD
lubABC\nBCD
dla wyjścia interaktywnego / terminalowego byłoby bardziej przydatne niż uzyskanie dwóchABC
iBCD
linii dla wywoływanego katalogu$'ABC\nBCD
. To na poziomie prezentacji użytkownika, moglibyśmy również$'AB\bC'
zauważyć , że w przypadku pliku o nazwie , gdy dane wyjściowe trafiają do terminala, zobaczyszAC
bez takiej?
zamiany ...Bash-ical:
drukuje:
lub
drukuje:
źródło
Możesz mieć
find
ponowną rekompensatę:źródło
Dla Bash: Simple (działa dla plików / katalogów ze spacjami i znakami nowej linii ):
Wydrukuję:
Nawet jeśli są tworzone pliki.
źródło
dotglob
opcję, jeśli jest to niepożądane) i zawiera oprócz linków dowiązania symboliczne do katalogów (**
przechodziłoby również dowiązania symboliczne w bash 4.2 i wcześniejszych).find
nie wyklucza żadnego pliku. globs wyklucza pliki kropkowe, warto wskazać na różnicę między nimi.tree
Komenda jest przeznaczony właśnie do tego celu. Głębokość można kontrolować za pomocą-L
flagi. Oto przykład na lokalnej stronie Wordpress, którą prowadzę:źródło
Opierając się na odpowiedzi DopeGhoti, co powiesz na pętlę dopasowania:
Powodem takiego działania jest to, że może to być mylące / uciążliwe dla wielu
-exec
plików, przy jednoczesnym unikaniu problemów z osobliwymi nazwami plików zawierającymi \ n 'itd. -Print0 użyje separatorów zerowych między wynikami.źródło
Opierając się na tym, co zacząłeś:
egrep pobiera * wp-content / plugins / * i dowolne znaki do następnego ukośnika / lub końca wiersza $ - który zawiera żądaną część.
sed , z separatorem ~, wybiera żądaną część za pomocą pierwszego zestawu nawiasów () i używa \ 1 (tego, co chcesz) jako zamiennika wszystkiego
uniq odfiltrowuje duplikaty wyników
źródło