2013-08-12 14 views
12

Potrebbe trattarsi di una domanda duplicata ma non sono riuscito a trovare la soluzione per questo voglio copiare gli ultimi 3 mesi di file da una directory a un'altra directory ma potrei trovarla solo per elencare il file usando il seguente comando.Copia i file in base alla data di modifica in linux

find . -mtime -90 -ls 

io davvero non so come copiare i file utilizzando -mtime. Sono nuovo di linux, per favore aiutami.

risposta

18

Utilizzare l'opzione -exec per find:

find . -mtime -90 -exec cp {} targetdir \; 

-exec sarebbe copiare ogni risultato restituito da find alla directory specificata (targetdir nell'esempio di cui sopra).

2

Immagino che prima memorizzi temporaneamente l'elenco di file e utilizzi un ciclo.

find . -mtime -90 -ls >/tmp/copy.todo.txt 

È possibile leggere la lista, se non è troppo grande, con

for f in `cat /tmp/copy.todo.txt`; 
do echo $f; 
done 

Nota: le virgolette intorno gatto ... sono apici, spesso in alto a sinistra della tastiera

Si può quindi sostituire il comando echo con un comando di copia:

for f in `cat /tmp/copy.todo.txt`; 
do cp $f /some/directory/ 
done 
+0

Sul mio backticks tastiera si trovano in alto a destra. Accanto al punto interrogativo. (Tastiera europea/nordica) – f2lollpll

3

Utilizzare questo comando:

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done 
3

si può anche selezionare la data e l'ora esatta altro che tornare a certa quantità di giorni

cp `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER 

copie di sopra di tutti i file nella directory che erano creato dopo il 18 settembre 2016 20:05:00 per la CARTELLA (3 mesi prima di oggi :)

Prestare attenzione al simbolo per il comando di ricerca, NON è questo: ' è questo, un apice inverso: ` selezione della data è con questo: '

Se si dispone di file con spazi, a capo, tabulazioni o caratteri jolly nei loro nomi, è possibile utilizzare una delle soluzioni da Stéphane Chazelas, prima è per GNU, in secondo luogo è per GNU o qualche BSD:

find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "[email protected]" FOLDER' sh {} + 
1

Es: selezionare il giorno 09/08/2017

ls -l 
-rw-rw-rw- 1 root  system   943 Aug 09 02:59 File 

for j in `ls -l |awk '{ if ($7 == "09") print $9}'` 
    do 
     mv $j $Destination; 
    done 
Problemi correlati