Jak zmusić ls do wyplucia płaskiej listy ścieżek rekurencyjnych jeden na linię?
Na przykład chcę tylko płaską listę plików z ich pełnymi ścieżkami:
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt
ls -a1
prawie robi to, czego potrzebuję, ale nie chcę fragmentów ścieżek, chcę pełne ścieżki.
bash
command-line
find
ls
dreftymac
źródło
źródło
Odpowiedzi:
Jeśli naprawdę chcesz użyć
ls
, sformatuj dane wyjściowe za pomocą awk:źródło
awk
wyrażenia?Użyj znajdź:
Jeśli chcesz tylko pliki (pomiń katalogi, urządzenia itp.):
źródło
ls
parametry takie jak--sort=extension
„zrealizowane” przez to rozwiązanie?ls -ld $(find .)
jeśli chcesz posortować dane wyjściowe według czasu modyfikacji:
ls -ltd $(find .)
źródło
--sort=extension
parametruls
find . -name "*" -exec ls -ld '{}' \;
(że działa niezależnie od liczby plików), ale twoje polecenie jest o wiele krótsze do napisania;)find . -ls
.Wypróbuj następujący prostszy sposób:
źródło
find "`pwd`"
jeśli ścieżka zawiera spacje lub inne znaki specjalne.find .
? -.-pwd
na początek, wydrukuje ścieżki bezwzględne. Nawiasem mówiąc: „Jak to się różni odfind
” ;-)Najlepsze polecenie to:
tree -fi
Aby użyć plików, ale nie łączy, musisz usunąć
>
z wyników:Jeśli chcesz poznać charakter każdego pliku (na przykład tylko do odczytu plików ASCII) za pomocą dwóch
while
s:źródło
tree
!brew install tree
, ponieważ używasz homebrewOch, naprawdę długa lista odpowiedzi. Bardzo mi pomogło, a na koniec stworzyłem własny, którego szukałem:
Aby wyświetlić listę wszystkich plików w katalogu i jego podkatalogach:
Aby wyświetlić listę wszystkich katalogów w katalogu i jego podkatalogach:
Aby wyświetlić listę wszystkich katalogów i plików w katalogu i jego podkatalogach:
źródło
find "$PWD" -type f | grep '\.json$'
Nie wiem o pełnej ścieżce, ale możesz użyć jej
-R
do rekurencji. Alternatywnie, jeśli nie masz ochotyls
, możesz po prostu to zrobićfind *
.źródło
Nie używając zewnętrznych poleceń innych niż ls:
źródło
Przydatne w przypadku niektórych ograniczonych powłok urządzenia, w których funkcja znajdowania / lokalizowania nie jest dostępna.
źródło
awk
?znajdź / zrobi lewę
źródło
Nie komplikuj tego. Właśnie tego użyłem i uzyskałem piękny wynik:
źródło
ls -lR
nie osiągnąłby tego celu.Najłatwiejszym sposobem dla wszystkich przyszłych ludzi jest po prostu:
Pokazuje to jednak również rozmiar zawartości każdego folderu. Możesz użyć awk, aby wyświetlić tylko nazwę folderu:
Edytuj- Przepraszam, mój zły. Myślałem, że potrzebne były tylko foldery. Zostawię to tutaj, na wypadek gdyby ktoś w przyszłości i tak tego potrzebował ...
źródło
Mając swobodę korzystania ze wszystkich możliwych opcji ls:
find -type f | xargs ls -1
źródło
Myślę, że dla płaskiej listy najlepszym sposobem jest:
(lub w celu zapisania go w pliku txt)
źródło
find: illegal option -- D
Uruchom polecenie bash w następującym formacie:
źródło
Oto częściowa odpowiedź, która pokazuje nazwy katalogów.
Wyjaśnienie:
ls -mR *
wyświetla pełne nazwy katalogów kończące się na „:”, a następnie osobno wyświetla pliki w tym katalogused -n 's/://p'
znajduje linie kończące się dwukropkiem, zdejmuje je z jelita i drukuje linięPowtarzając listę katalogów, powinniśmy również móc znaleźć katalogi. Nadal nad tym pracuję. Przebijanie symboli wieloznacznych przez xargs jest wyzwaniem.
źródło
Dodanie symbolu wieloznacznego na końcu katalogu ls wymusza pełne ścieżki. Teraz masz to:
Zamiast tego możesz to zrobić:
Niestety nie drukuje to pełnej ścieżki do katalogów, w których ponownie się znajdują, więc może nie być to pełne rozwiązanie, którego szukasz.
źródło
Widzę wiele odpowiedzi. To jest moje i myślę, że całkiem przydatne, jeśli pracujesz na Macu.
Jestem pewien, że wiesz, że istnieją pewne pliki „pakietowe” ( .app , .rtfd , .workflow itd.). I patrząc w okno Findera wydają się pojedynczymi plikami. Ale nie są. I
$ ls
albo$ find
zobacz je jako katalogi ... Więc jeśli nie potrzebujesz też listy ich zawartości, działa to dla mnie:Oczywiście dotyczy to działającego katalogu i można dodawać rozszerzenia innych pakietów (ale zawsze
/
po nich). Lub dowolne inne rozszerzenia, jeśli nie są pakietami bez/
.Raczej interesujące „
.lpdf/
” (wielojęzyczny pdf). Ma normalne.pdf
rozszerzenie (!!) lub brak w Finderze. W ten sposób dostajesz (lub liczy tylko 1 plik) za to,pdf
a nie kilka rzeczy…źródło
ls -lR
tego właśnie szukałeś, a przynajmniej ja byłem. Twoje zdrowieźródło
ls -lR
nie osiągnąłby tego celu.Jeśli katalog zostanie przekazany jako ścieżka względna, przed wywołaniem funkcji find należy go przekonwertować na ścieżkę bezwzględną. W poniższym przykładzie katalog jest przekazywany jako pierwszy parametr do skryptu:
źródło
readlink
możesz to zrobićdirectory=$(readlink -e $1)
readlink
w systemie OS X 10.5.8 nie obsługuje opcji -e.Jest to powolne, ale działa rekurencyjnie i drukuje zarówno katalogi, jak i pliki. Możesz potokować go za pomocą awk / grep, jeśli chcesz tylko nazwy plików bez wszystkich innych informacji / katalogów:
źródło
@ ghostdog74: Mała modyfikacja rozwiązania.
Poniższy kod może być wykorzystany do wyszukiwania pliku z pełną ścieżką bezwzględną.
źródło
Znałem nazwę pliku, ale chciałem również katalog.
znajdź $ PWD | fgrep nazwa pliku
działał doskonale w Mac OS 10.12.1
źródło