Elenca ricorsivamente tutti i file in una directory inclusi i file nelle directory dei link simbolici


147

Supponiamo che io sono una directory /dirall'interno della quale ci sono 3 link simbolici ad altre directory /dir/dir11, /dir/dir12e /dir/dir13. Voglio elencare tutti i file dirinclusi quelli in dir11, dir12e dir13.

Per essere più generico, voglio elencare tutti i file inclusi quelli nelle directory che sono collegamenti simbolici. find ., ls -Recc., interrompere il collegamento simbolico senza spostarsi all'interno per elencarli ulteriormente.


Risposte:


232

L' -Lopzione per lsrealizzare ciò che desideri. Dereferenzia i collegamenti simbolici.

Quindi il tuo comando sarebbe:

ls -LR

Puoi anche farlo con

find -follow

L' -followopzione indica a find di seguire collegamenti simbolici alle directory.

Su Mac OS X utilizzare

find -L

come -followè stato deprecato.


14
-follow è deprecato a favore di -L nelle versioni più recenti di find.
pjz,

@pjz: esiste un riferimento incrociato per '-follow deprecated; usa -L '? Con mia grande sorpresa, ho trovato '-L' e '-H' elencati nello standard POSIX / SUS su opengroup.org/onlinepubs/009695399/toc.htm , e ancora di più con mia sorpresa non '-follow', così ho risposto alla mia domanda.
Jonathan Leffler,

questo non ha funzionato per me. prima non è successo niente, poi ho provato con -follow- e ha detto che non riusciva a trovare la cartellaollow
smatthewenglish

4
Su OS X 10.10 funziona: find -L .- Ho avuto lo stesso problema di @ S.Matthew_English
fregante

La tua risposta è buona, ma voglio followsolo i percorsi dei file (percorso completo al file) e non il percorso della directory, come posso fare?
Vicky Dev,

116

Che ne dici di un albero ? tree -lseguirà i symlink.

Disclaimer : ho scritto questo pacchetto.


2
Che ne dici di un pacchetto arch?
Mr_and_Mrs_D

Questa è una visione più intuitiva di ls. È anche più facile incollarlo.
Dhaupin,

46
find /dir -type f -follow -print

-type f significa che visualizzerà file reali (non collegamenti simbolici)

-follow significa che seguirà i collegamenti simbolici della tua directory

-print lo farà visualizzare i nomi dei file.

Se si desidera una visualizzazione di tipo ls, è possibile effettuare le seguenti operazioni

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

questo produce un display più bello ls -Ldell'opzione
eusoubrasileiro

10

Usando ls:

  ls -LR

da "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

Oppure, usando find:

find -L .

Dalla manpage di ricerca:

-L     Follow symbolic links.

Se scopri di voler seguire solo alcuni collegamenti simbolici (come forse solo quelli di livello superiore che hai menzionato), dovresti guardare l'opzione -H, che segue solo i collegamenti simbolici che ti passi sulla riga di comando.


5

Sapevo che treeera appropriato, ma non avevo installato l'albero. Quindi, ho avuto un alternato abbastanza vicino qui

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

Questo era esattamente quello di cui avevo bisogno. Grazie.
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

proprietà del file a cui punta il collegamento, non dal collegamento stesso (a meno che non sia un collegamento simbolico interrotto o find non sia in grado di esaminare il file a cui punta il collegamento). L'uso di questa opzione implica -noleaf. Se in seguito si utilizza l'opzione -P, -noleaf sarà ancora attivo. Se -L è attivo e trova scopre un collegamento simbolico a una sottodirectory durante la sua ricerca, verrà cercata la sottodirectory indicata dal collegamento simbolico.


2
ls -R -L

-Ldereferenze link simbolici. Ciò renderà anche impossibile vedere eventuali link simbolici ai file: sembreranno i file puntati.


-1

nel caso in cui desideri stampare tutto il contenuto del file : find . -type f -exec cat {} +

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.