trova l'uso con -L


34

io ho

link -> file

lo voglio

find -L . -name 'link'

E prendi

./link

Perché?

man find dice:

-L: seguire i collegamenti simbolici. Quando find esamina o stampa informazioni sui file, le informazioni utilizzate devono essere prese dalle proprietà del file a cui punta il collegamento, non dal collegamento stesso (a meno che non si tratti di un collegamento simbolico interrotto o find non sia in grado di esaminare il file a cui punta il collegamento).

Risposte:


12

Con -L, esamina le proprietà del file - contenuto o metadati, non quelle del collegamento. Ad esempio, se si utilizza -atime, controllerà atimeil file, non il collegamento:

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

testdir/linkè stato creato dopo testdir/ref, ma il file a cui punta non lo era.


1
Puoi spiegare prendendo il mio esempio? Quello che capisco è questo: Nel mio esempio find inizia la sua ricerca. Incontra ./link, poiché -L è in effetti lo dereferenzia e prende le proprietà di ./file. Confronta il nome di ./file con il modello 'link' e dato che non corrisponde, non dovrebbe riportare alcuna o / p. Cosa c'è di sbagliato nel mio ragionamento?
Ankur Agarwal,

Dal manuale di ricerca che hai citato, "le informazioni utilizzate devono essere prese dalle proprietà del file a cui punta il collegamento". Il nome di un file non è una delle sue proprietà, quindi utilizza ancora il nome del collegamento. Questo è anche molto più utile del nome del file reale.
Kevin,

"Il nome del file non è una delle sue proprietà" Non lo sapevo. Qualunque altro attributo simile di file che non è considerato proprietà? Ad essere sincero, sono ancora scettico e aspetterei quello che gli altri hanno da dire.
Ankur Agarwal

Come in @abc, non sapevo che il nome di un file non fosse una proprietà del file. Dove posso trovare questa informazione in qualsiasi documentazione e / o pagina man (s)? Si prega di fare riferimento a dove posso saperne di più sulle proprietà di un file.
burlone

34

La regola generale è che se un comando opera su collegamenti (cioè voci di directory, che sono puntatori a inode), il comando considera i collegamenti simbolici come se stessi anziché come l'oggetto a cui punta il collegamento. Altrimenti il ​​comando opera su ciò a cui punta il collegamento simbolico. Quindi cpsegue i collegamenti simbolici per impostazione predefinita e copia il contenuto del file a cui punta il collegamento. Ma quando chiedi cpdi gestire le voci della directory specificando -R, smette di seguire i collegamenti simbolici. mvfunziona sempre con le voci della directory e quindi non segue mai i collegamenti simbolici.

L' findattività normale del comando è di operare sulle voci della directory, quindi i collegamenti simbolici non sono seguiti per impostazione predefinita. L'aggiunta -Lfa sì findche seguano i collegamenti simbolici per tutte le proprietà tranne quella che non può essere ignorata durante la ricerca nella directory, il nome. Uno degli scopi di find -nameè fornire input per comandi come mve rm, che operano su voci di directory. Ci sarebbero risultati spiacevoli e sorprendenti se find -L dir -namepotessero produrre nomi che puntavano all'esterno dell'albero delle directory radicato dir.


WOW! Perché questo concetto sottile non è ben illustrato nelle pagine man (a meno che non me lo sia perso)? Questa è una grande sorpresa per me.
Ankur Agarwal,

2
@Kyle Jones There would be unpleasant and surprising results if trova -L dir -name` potrebbe produrre nomi che puntavano all'esterno dell'albero delle directory radicato su dir` => non dovrebbe essere: ci sarebbe spiacevole ... se find dir -name pattern...? perché l'aggiunta di -L consente di puntare alla
directory

Quindi, come arrivare cp -Ra copiare cose con un link simbolico?
javadba,
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.