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.

CuriousDawg
quelle
Mögliches Duplikat von Wie bekomme ich nur den Dateinamen unter Linux `find`?
Eugen Konkov

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.

Michael Ridley
quelle
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.

Steve Baker
quelle
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
dvorak
quelle
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.

pjz
quelle
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/--/ |-/'
Divinedragon
quelle
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.

Ashwin Muni
quelle
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.

Branan
quelle
-1

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

qrtLs
quelle