2008-09-19 7 views
102

Angenommen, ich habe ein Verzeichnis /dir innerhalb dessen gibt es 3 Symlinks in andere Verzeichnisse /dir/dir11, /dir/dir12 und /dir/dir13. Ich möchte alle Dateien in dir einschließlich der in dir11, dir12 und dir13 auflisten.LINUX Recursively Liste alle Dateien in einem Verzeichnis, einschließlich Dateien in Verzeichnisse Symlink

Um allgemeiner zu sein, möchte ich alle Dateien einschließlich der in den Verzeichnissen, die Symlinks sind, auflisten. find ., ls -R usw. stoppen Sie auf dem Symlink, ohne in sie zu navigieren, um weiter aufzulisten.

+0

Mögliches Duplikat [Wie nur Dateinamen mit Linux bekommen \ 'find \'?] (Http://stackoverflow.com/questions/5456120/how-to -only-get-Dateiname-with-linux-find) –

Antwort

157

Die -L Option zu ls wird erreichen, was Sie wollen. Es dereferenziert symbolische Links.

Also Ihr Befehl wäre:

ls -LR 

Sie können auch dies erreichen mit

find -follow 

Die -follow Option leitet symbolische Links auf Verzeichnisse folgen finden.

Unter Mac OS X verwenden

find -L 

als -follow ist veraltet.

+10

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

+0

@pjz: Gibt es einen Querverweis für '-follow deprecated; benutze -L? Zu meiner großen Überraschung fand ich "-L" und "-H" im POSIX/SUS-Standard unter http://www.opengroup.org/onlinepubs/009695399/toc.htm und noch mehr zu meiner Überraschung kein "Follow-up", also beantwortete ich meine eigene Frage. –

+0

das hat nicht für mich funktioniert. Zuerst passierte nichts, dann probierte ich mit "-follow" - und es sagte, dass es den Ordner 'ollow' nicht finden konnte. –

7

Mit 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 Fund:

find -L . 

Von der Entdeckung manpage:

-L  Follow symbolic links. 

Wenn Sie möchten, dass Sie nur einem paar symbolischen Links folgen (wie vielleicht nur die Toplevel, die Sie erwähnten), sollten Sie die Option -H betrachten, die nur Symlinks folgt, die Sie in der Kommandozeile übergeben.

35
find /dir -type f -follow -print 

-type f bedeutet es echte Dateien angezeigt werden (nicht Symlinks)

-follow bedeutet es, Ihr Verzeichnis Symlinks

-print verursacht folgen wird es die Dateinamen angezeigt werden soll.

Wenn Sie eine ls Anzeige mögen, können Sie das folgende

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

schön, das funktioniert gut –

+0

Das funktioniert auch gut auf OS X –

+0

dies erzeugt eine schönere Anzeige als die 'ls -L Option – eusoubrasileiro

2
ls -R -L 

-L Dereferenzierungen symbolische Links tun. Dies macht es auch unmöglich, irgendwelche symbolischen Verknüpfungen zu Dateien zu sehen - sie sehen aus wie die Datei, auf die verwiesen wird.

97

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

Haftungsausschluss: Ich habe dieses Paket geschrieben.

+41

upvoted zum Schreiben und zur Verfügung stellen coole Software:) – mit

+2

Wie wäre es mit einem Bogen-Paket? –

+0

@Mr_and_Mrs_D pacman -S extra/Baum – etherous

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 von die Datei, auf die der Link verweist, nicht von der Verbindung selbst (es wäre denn, es ist ein gebrochener symbolischer Link oder finden, ist nicht in der Lage ist zu untersuchen die Datei zu , die die Verbindung Punkte). Die Verwendung dieser Option impliziert -noleaf. Wenn Sie später die Option -P verwenden, wird -noleaf immer noch wirksam. Wenn -L in Kraft ist und finden Sie entdeckt einen symbolischen Link zu einem Unterverzeichnis während seiner Suche wies das Unterverzeichnis durch die symbolische Verbindung wird gesucht werden.

2

Ich wusste, tree war eine geeignete, aber ich hatte keinen Baum installiert. Also, ich habe einen ziemlich nahe alternativen here

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

Das war genau das, was ich brauchte. Vielen Dank. –

Verwandte Themen