Newsgroup: it.comp.os.linux.iniziare
Titolo: Ricerca di file.

Ciao,
desidero sapere se esiste un comando da terminale oppure un programma 
che mi permetta di vedere se ho un file x , di cui non conosco 
preventivamente il nome , che sia stato salvato , sempre con lo stesso 
nome , in directory diverse. 
Grazie.

Il Sat, 12 Mar 2011 14:07:47 +0100, stern scrisse:

man find
-- 
"Never underestimate the bandwidth of a station wagon full of tapes
hurtling down the highway" - Andrew S. Tanenbaum
http://blog.mainardi.me
python -c "print 'bG9ybWF5bmFAZ21haWwuY29t'.decode('base64')"

 man find
non vedo come possa risolvere il problema con il solo find.
prima deve trovare i file doppioni nel file system, e diciamo che lo puo' 
fare con
find . -exec basename {} \;|sort  > file1
confrontando (attraverso un comm) con l'output di
find . -exec basename {} \;|sort|uniq > file2
quindi 
comm -3 file1 file2 |uniq > file3
adesso file3 ha i file che hanno doppioni nel FS
a questo punto tali files vanno cercati
quindi ciclare su file3 e fare un find . -name "$rigadifile3"
dopo ovviamente cancellare file1,file2 e file3
questa è la soluzione che mi è venuta di getto, utilizzando files di 
appoggio (che non sarebbe male magari crearli in /tmp con mktemp).
sicuramente si puo' migliorare l'algoritmo, ma insomma, siamo ben lontani 
da risolverlo con un man find!
o c'è qualche opzione di find che risolve anche questo problema? 
 

 
ps: 
1 -forse c'è qualche opzione di find che stampa solo il nome del file, ma 
non avevo voglia di cercarla, quindi ho usato basename
2 - direi che un -print0 nei find non ci starebbe male
3 - quando dico file system intendo dalla directory corrente , 
ovviamente. :)

nome, in directory diverse.
Il programma c'e' ed e' stato fatto apposta, e' locate.
Puoi farlo anche con find come t'han detto, pero' c'e'
la differenza che locate legge un db (aggiornato solo
giornalmente) e ci mette 1/10 di secondo, find invece ogni
volta deve cercare in tutto il disco o i dischi, tutto il
fs insomma, e allora ci puo' mettere parecchio.
Se vuoi aggiornare prima il db di locate devi dare come root:
[~]root_#: updatedb
oppure se hai paura di root:
[~]stern_$: sudo updatedb
se pero' vuoi che ogni utente possa leggere quel che c'e'
in ogni directory, anche riservata, devi darlo cosi':
updatedb -l 0
(con o senza sudo), oppure ancora se in entrambi i casi
vuoi vedere scorrere tutto quel che scrive nel db, devi
aggiungere l'opzione -v, cioe':
[~]root_#: updatedb -v -l 0
(e' chiaro che in tutti i casi finche' non scrivi nuovi file
non hai nessun bisogno di ridarlo, insomma fai una sola volta
quel che find ripete per ogni ricerca.. e poi find non salta
certe directory che invece deve saltare: guardati il file
/etc/updatedb.conf per rendertene conto)
Ps. Guarda che se non hai debian o derivate, ma slackware
o derivate le opzioni forse son diverse, dai man locate,
perche' il vero nella deb ha mlocate, nella slack slocate.
-- 
Saluti, Dalet

 Il programma c'e' ed e' stato fatto apposta, e' locate.
vero, ma in ogni caso gli serve sapere prima i nomi dei file doppioni, 
quindi deve ficcarlo dentro un algoritmo tipo il mio.
E locate fa ricerca su tutto il file system, non in una singola 
directory .

Il 12-03-2011, RedWiz dice:




Si' ma io gliel'ho postato perche' uso moltissimo locate,
anche al di la' del fs, cioe' ho il db di decine di cdrom
e trovo quel che cerco in qualche secondo compreso il tempo
di battere il comando di ricerca.
(be' la storia dei doppioni non l'ho considerata, mo' guardo
le righe di comando tue, mica l'aveva detto dei doppioni...
visto, e il comando comm non lo conoscevo, buono a sapersi!)
-- 
Saluti, Dalet