PDA

Visualizza la versione completa : [linux] FIND


Molok
20-04-2005, 22:51
Ho bisogno di una riga di codice da inserire in uno script linux che mi scandisca la mia home e le relative sottodirectory e mi restituisca una lista dei fai non modificati da piu' di una settimana. Detto cosi sembra una cosa difficile ma immagino sia na cosa semplicissima perchè il comando find mi permette di scandire la mia home e le sottodirectory e aiutarmi nella directory con un test solo che non so come fare una cosa del tipo
FIND ( directorydi partenza,TESTdataattuale-1settimana < datafile)
spero in un vostro aiutino

salve

cacao74
21-04-2005, 02:09
sergio@tweety:~$ find ./ -daystart -mtime +7 [-fls list.txt]

vedi se ti piace :fagiano:

la parte tra le parentesi quadre, ti permette di salvare su file un output esteso (sullo stile di ls -l)

man find

ciao

Molok
21-04-2005, 17:04
grazie era proprio quello che volevo però ora mi sorge un nuovo problema come faccio a mettere la lista dei file che mi restituisce find in un'operazione come cp??
In pratica io devo fare
cp [lista dei file del find] [una directory] :dhò:

e poi mi spieghi in due parole queto test -daystart -mtime +7 che hai usato nel comando find???

ciao grazie spero in una tua risposta ciaoooo

cacao74
21-04-2005, 18:44
find <dir_origine> -daystart -mtime +7 | xargs -i cp '{}' <dir_destinazione>

-daystart: il conteggio delle 24 ore parte dall'inizio della giornata (00:00) e non dall'ora in cui il comando viene eseguito

-mtime +7: si prendono in considerazione i file modificati più di 7 giorni (7*24 ore) fa

xargs: prende un elenco da STDIN e lo passa come argomento al comando successivo.

-i: per specificare la posizione dell'elenco sulla riga di comando

'{}': l'elenco in questione (concettualmente simile a -exec '{}' di find)

man find
man xargs

ciao

Molok
21-04-2005, 20:34
ok la tua riga di codice fa quello che volevo ma ho trovato un intoppo se ad esempio in/andrea/pippo c'e' un file di nome prova e in andrea/pippo/bah c'e' un'altro file di nome prova il secondo sovrascrive il primo.

Visto che sei pratico della materia sai mika come funziona il comando TAR vorrei impacchettare i file modificati da piu di una settimana in un bel file.tar.gz e copiarli sempre nell'altra directory :stordita:

ciaooo :messner:

cacao74
21-04-2005, 22:05
beh, sei un perito informatico, ti ho indicato due esempi,
dovresti essere in grado di camminare con le tue gambe.

leggiti le pagine di manuale di
cp (si parla anche di backup)
tar (utilità per archiviare file)

ciao :ciauz:

Molok
22-04-2005, 20:39
non puoi farmi questo :(
Sono ad un vicolo ceco non capisco come mai questa cosa non funziona
find ./ -daystart -mtime +7 |xargs -i tar -cvvf pippo.tar.gz '{}' |xargs -i cp '{}' $1 -i

Ma non fa quello che mi aspetto :dhò: fose non ho capito come funziona xargs :confused:

PS: cmq sarò un perito informatico ma ho fatto conoscenza con linux e la sua bash 3 giorni fa quindi penso siano domande un po tonte dovute alla poca conoscenza dei comandi e della sintassi. Scusa se a te sembra che ti sto chiedendo cose banali

ciaooooo

cacao74
23-04-2005, 00:49
Il mio tono del post precedente voleva essere scherzoso, ma avendo dimenticato delle faccine... :)

ecco qua:

find $DIR_ORIGINE -mindepth 1 -daystart -mtime +10 | xargs --max-lines=500 tar cf $DIR_DESTINAZIONE/backup-$(date +%Y-%m-%d).tar

Questa riga di comando effettua questi tre compiti:
1. ricerca con find i file più vecchi di 10 giorni all'interno della directory $DIR_ORIGINE e lo manda in 'pipe' al comando successivo.
2. xargs, acquisisce sullo 'standard_input' i dati ricevuti dalla 'pipe' del comando precedente ed accumula i dati fin ad un massimo di 500 righe (--max-lines)
3. per finire tar riceve come argomento l'elenco dei file fornito da xargs creando un archivio di backup con la data corrente come nome.

nota: se i files fossero più di 500, il comando terminerebbe con un errore, percio' metti il valore che ritieni più opportuno.

Altra considerazione che si può fare è che non si è per nulla obbligati a risolvere il quesito con una sola riga di comando, potrebbe essere più semplice e comodo crearsi un piccol scriptino ad hoc.

Studia e buon lavoro.

ciao

Molok
24-04-2005, 20:31
ho risolto i due problemi con queste due righe:
find <dir_sorg> -mtime +7 -exec cp {} <dir-dest> \;
find <dir_sorg> -mtime +7 -exec tar -rf nome.tar {} \;
insomma in pratica non mi piaceva il tuo xargs :incupito:
Cmq mi sei stato veramente di aiuto thx :ciauz:
Per finire ti posso chiedere un'ultima cosina come si fa a trovare la home di un user mi serverebbe una varibile che mi ritorna l'eser dell'utente che ha effettuato l'accesso in modo da poter scrivere:
/home/<variabile>

thx

Loading