Rekurencyjnie wyświetla wszystkie pliki w katalogu, w tym pliki w katalogach dowiązań symbolicznych


147

Załóżmy, że mam katalogu /dir, wewnątrz której znajdują się 3 dowiązania do innych katalogów /dir/dir11, /dir/dir12oraz /dir/dir13. Chcę listę wszystkich plików w dirtym te w dir11, dir12i dir13.

Aby być bardziej ogólnym, chcę wymienić wszystkie pliki, w tym te w katalogach, które są dowiązaniami symbolicznymi. find ., ls -Ritp. zatrzymują się na dowiązaniu symbolicznym bez przechodzenia do nich w celu wyświetlenia dalszej listy.


Odpowiedzi:


232

-LOpcja lsbędzie osiągnąć to, co chcesz. Eliminuje dowiązania symboliczne.

Więc twoje polecenie byłoby następujące:

ls -LR

Możesz to również osiągnąć za pomocą

find -follow

Ta -followopcja kieruje find podążanie za symbolicznymi dowiązaniami do katalogów.

W systemie Mac OS X użyj

find -L

jak -followzostało wycofane.


14
-follow jest przestarzałe na rzecz -L w nowszych wersjach find.
pjz

@pjz: czy istnieje odniesienie do „-follow przestarzałe; użyć -L '? Nieco ku mojemu wielkiemu zdziwieniu, znalazłem '-L' i '-H' wymienione w standardzie POSIX / SUS na opengroup.org/onlinepubs/009695399/toc.htm , a jeszcze bardziej, ku memu zdziwieniu, brak '-follow', więc odpowiedziałem na własne pytanie.
Jonathan Leffler,

to nie zadziałało dla mnie. najpierw nic się nie stało, potem próbowałem -follow- i powiedziałem, że nie można znaleźć folderuollow
smatthewenglish

4
Na OS X 10.10 to działa: find -L .- Miałem ten sam problem co @ S.Matthew_English
fregante

Twoja odpowiedź jest dobra, ale chcę followtylko ścieżki do plików (pełna ścieżka do pliku), a nie ścieżka do katalogu, jak mam to zrobić?
Vicky Dev

116

A co z drzewem ? tree -lbędzie podążać za linkami symbolicznymi.

Zastrzeżenie : napisałem ten pakiet.


2
A co z pakietem łukowym?
Mr_and_Mrs_D

To jest bardziej intuicyjny widok niż ls. Łatwiej jest też wkleić.
dhaupin

46
find /dir -type f -follow -print

-type f oznacza, że ​​wyświetli prawdziwe pliki (nie dowiązania symboliczne)

-follow oznacza, że ​​będzie podążał za dowiązaniami symbolicznymi do Twojego katalogu

-print spowoduje wyświetlenie nazw plików.

Jeśli chcesz mieć wyświetlacz typu ls, możesz wykonać następujące czynności

find /dir -type f -follow -print|xargs ls -l

daje to ładniejszy obraz niż ls -Lopcja
eusoubrasileiro

10

Korzystanie ls:

  ls -LR

od „man ls”:

   -L, --dereference
          when showing file information for a symbolic link, show informa‐
          tion  for  the file the link references rather than for the link
          itself

Lub używając funkcji znajdź:

find -L .

Ze strony podręcznika wyszukiwania:

-L     Follow symbolic links.

Jeśli zauważysz, że chcesz podążać tylko za kilkoma dowiązaniami symbolicznymi (jak może tylko te z najwyższego poziomu, o których wspomniałeś), powinieneś spojrzeć na opcję -H, która podąża tylko za dowiązaniami symbolicznymi, które przekazujesz do niej w linii poleceń.


5

Wiedziałem, że treejest odpowiedni, ale nie mam zainstalowanego drzewa. Tak, mam dość blisko zastępcę tutaj

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'

To było dokładnie to, czego potrzebowałem. Dziękuję Ci.
Scott C

5
find -L /var/www/ -type l

# man find
-L     Follow  symbolic links.  When find examines or prints information about files, the information used shall be taken from the

właściwości pliku, na który wskazuje łącze, a nie samego odsyłacza (chyba że jest to zepsute dowiązanie symboliczne lub find nie może zbadać pliku, na który wskazuje łącze). Użycie tej opcji implikuje -noleaf. Jeśli później użyjesz opcji -P, -noleaf nadal będzie działać. Jeśli działa -L i find odnajdzie podczas wyszukiwania dowiązanie symboliczne do podkatalogu, przeszukany zostanie podkatalog wskazywany przez dowiązanie symboliczne.


2
ls -R -L

-Lusuwa dowiązania symboliczne. Uniemożliwi to jednak wyświetlenie żadnych dowiązań symbolicznych do plików - będą one wyglądać jak wskazany plik.


-1

jeśli chcesz wydrukować całą zawartość pliku : find . -type f -exec cat {} +

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.