Listen Sie rekursiv alle Dateien in einem Verzeichnis auf, einschließlich Dateien in Symlink-Verzeichnissen


147

Angenommen , ich habe ein Verzeichnis /dirinnerhalb dessen gibt es 3 Symlinks in andere Verzeichnisse /dir/dir11, /dir/dir12und /dir/dir13. Ich möchte alle Dateien dirauflisten dir11, einschließlich der Dateien in dir12und dir13.

Um allgemeiner zu sein, möchte ich alle Dateien auflisten, einschließlich derjenigen in den Verzeichnissen, die Symlinks sind. find ., ls -REtc. an den Symlink Stopp ohne weiter in sie zur Liste zu navigieren.


Antworten:


232

Die -LOption, um lsdas zu erreichen, was Sie wollen. Es dereferenziert symbolische Links.

Ihr Befehl wäre also:

ls -LR

Sie können dies auch mit erreichen

find -follow

Die -followOption weist find an, symbolischen Links zu Verzeichnissen zu folgen.

Unter Mac OS X verwenden

find -L

wie -followveraltet.


14
-follow ist in neueren Versionen von find zugunsten von -L veraltet.
pjz

@pjz: Gibt es einen Querverweis für '-follow veraltet; benutze -L '? Zu meiner großen Überraschung fand ich '-L' und '-H' im POSIX / SUS-Standard unter opengroup.org/onlinepubs/009695399/toc.htm und noch mehr zu meiner Überraschung kein '-follow'. Also beantwortete ich meine eigene Frage.
Jonathan Leffler

Das hat bei mir nicht funktioniert. Zuerst passierte nichts, dann versuchte ich es mit -follow- und es hieß, es könnte den Ordner nicht findenollow
smatthewenglish

4
Unter OS X 10.10 funktioniert dies: find -L .- Ich hatte das gleiche Problem wie @ S.Matthew_English
fregante

Ihre Antwort ist gut, aber ich möchte follownur Dateipfade (vollständiger Pfad zur Datei) und keinen Verzeichnispfad. Wie kann ich das tun?
Vicky Dev

116

Wie wäre es mit Baum ? tree -lwird Symlinks folgen.

Haftungsausschluss : Ich habe dieses Paket geschrieben.


2
Wie wäre es mit einem Arch-Paket?
Mr_and_Mrs_D

Dies ist eine intuitivere Ansicht als ls. Es ist auch einfacher zu kleben.
Dhaupin

46
find /dir -type f -follow -print

-type f bedeutet, dass echte Dateien angezeigt werden (keine Symlinks)

-follow bedeutet, dass es Ihren Verzeichnissymlinks folgt

-print bewirkt, dass die Dateinamen angezeigt werden.

Wenn Sie eine Anzeige vom Typ ls wünschen, können Sie Folgendes tun

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

Dies ergibt eine schönere Anzeige als die ls -LOption
eusoubrasileiro

10

Verwenden von ls:

  ls -LR

von '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

Oder mit find:

find -L .

Aus der Find-Manpage:

-L     Follow symbolic links.

Wenn Sie feststellen, dass Sie nur einigen symbolischen Links folgen möchten (wie vielleicht nur den von Ihnen erwähnten auf oberster Ebene), sollten Sie sich die Option -H ansehen, die nur Symlinks folgt, die Sie in der Befehlszeile an sie übergeben.


5

Ich wusste, dass dies treeangemessen war, aber ich hatte keinen Baum installiert. So bekam ich einen ziemlich nahe alternative hier

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

Das war genau das, was ich brauchte. Danke dir.
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

Eigenschaften der Datei, auf die der Link verweist, nicht vom Link selbst (es sei denn, es handelt sich um einen fehlerhaften symbolischen Link oder Find, der die Datei, auf die der Link verweist, nicht untersuchen kann). Die Verwendung dieser Option impliziert -noleaf. Wenn Sie später die Option -P verwenden, bleibt -noleaf weiterhin wirksam. Wenn -L aktiviert ist und find während seiner Suche eine symbolische Verknüpfung zu einem Unterverzeichnis entdeckt, wird das Unterverzeichnis durchsucht, auf das die symbolische Verknüpfung zeigt.


2
ls -R -L

-LDereferenzen symbolische Links. Dies macht es jedoch auch unmöglich, Symlinks zu Dateien zu sehen - sie sehen aus wie die Datei, auf die verwiesen wird.


-1

für den Fall , Sie möchten alle Datei drucken Inhalt : find . -type f -exec cat {} +

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.