Istnieje wiele sposobów. Oto coś, co jest bardzo szybki:
find /your/dir -type d -print0 | xargs -0 echo
ten skanuje/twoja/dir rekurencyjnie dla katalogów i przejdzie wszystkie ścieżki do komendy „echo” (wymiana od potrzeb). Może wywoływać echo wiele razy, ale spróbuje przekazać tyle nazw katalogów, na ile pozwala konsola na raz. Jest to niezwykle szybkie, ponieważ trzeba uruchomić kilka procesów. Ale działa tylko na programach, które mogą przyjąć dowolną liczbę wartości jako opcje. -print0 mówi znaleźć na osobnych ścieżkach plików przy użyciu zerowy bajt (i -0 mówi xargs czytać argumenty rozdzielając je bajtem zerowym) Jeśli nie mają później, można to zrobić:
find /your/dir -type d -print0 | xargs -0 -n 1 echo
lub
Opcja -n 1 spowoduje, że xargs nie będzie przekazywać więcej argumentów niż jeden w tym samym czasie do twojego programu. Jeśli nie chcesz, aby wyszukiwanie skanowało rekursywnie, możesz określić opcję głębokości, aby wyłączyć rekursję (nie znasz jednak składni na pamięć).
Choć jest to użyteczne w danym skrypcie, to kolejne pytanie ;-).
to robi, ale dlaczego? */jest znakiem wieloznacznym dla wszystkich katalogów? – jakev
Wow, który faktycznie działa, nawet w katalogach ze spacjami. Tak więc bash musi domyślnie zacytować wartości, gdy rozszerza znak wieloznaczny? Kocham to. – harpo
@JakeVA: Tak, dokładnie. Zauważ, że nie będzie zawierać ukrytych katalogów, chyba że ustawisz 'shopt -s dotglob'. Jeśli w bieżącym katalogu nie ma żadnych podkatalogów, powinieneś także ustawić 'shopt -s nullglob' (na wszelki wypadek ustaw). –