Quando eseguo il comando find . -mtime -60
Ricevo l'elenco dei file modificati negli ultimi 60 giorni.
Quindi, quando eseguo find . -mtime -60 -exec cp {} /tmp/1 \;
Posso copiare questi file in una nuova directory per l'elaborazione
Tuttavia, se voglio preservare i timestamp, non sono in grado di copiare solo i file necessari quando eseguo find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;
Quello che succede è che TUTTI i file nella directory di origine vengono copiati anziché solo i file di cui ho bisogno.
Qualche soluzione qui?
Risposta accettata:
Quello che sta succedendo qui è che quando usi il -R
opzione per cp
e fornisce una directory come argomento, copia tutto in quella directory. Inoltre, ciò non conserverà la struttura delle directory poiché tutti i file nelle directory inferiori verranno copiati direttamente in /tmp/2
. Questo potrebbe essere quello che vuoi (vedi la risposta di X Tian per come farlo in questo modo), ma fai attenzione se qualche file ha lo stesso nome, uno sovrascriverà l'altro alla destinazione.
Per preservare la struttura della directory, puoi usare cpio
:
find . -mtime -60 -print0 | cpio -0mdp /tmp/2
Se il -0
(o equivalente) l'opzione non è disponibile, puoi farlo, ma fai attenzione che nessuno dei tuoi nomi di file contiene una nuova riga:
find . -mtime -2 | cpio -mdp /tmp/2
cpio
dovrebbe anche supportare il -L
opzione, anche se fai attenzione perché in alcuni casi può causare un ciclo infinito.