Come scp / tar file che si trovano tra giorni specifici?


8

Devo copiare i file di registro del db tra due server suse di cui sono interessato ai file SOLO tra il 10.3.2013 - 13.3.2013

Si desidera comprimere i file prima di copiarli, quindi li tar e scp. Attualmente sto usando tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10che mi dà tutti i file dal 10.3.2013 fino ad ora. Ma non ho bisogno di tutti loro. E non ho trovato alcun interruttore tar.

Risposte:


12

Come indicato da Bichoy, è possibile utilizzare il findcomando per trovare i file con un tempo di accesso, creazione e modifica specifico. Tuttavia -mtime prende un offset con incrementi di 24 ore e non è sempre conveniente da calcolare a meno che non si desideri qualcosa da un determinato numero di "giorni" fa. Dovrai combinarlo con quello -daystartper "arrotondare" all'inizio della giornata.

Penso che sia più conveniente nel tuo caso, è l'opzione -newermt che accetta un datestring (e non il nome di un file di riferimento come la maggior parte delle versioni -newerXY)

Combina questo con l find' -print0opzione per gestire i file con spazi nel nome e facoltativamente per -type fnon ottenere alcuna directory nel periodo che ti interessa:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz 

C'è un grosso problema con questo: nel caso in cui il numero di file trovati diventi troppo lungo, xargsinvocherà il suo comando (in questo caso tar) più volte in base xargsalle necessità per adattare gli argomenti sulla riga di comando che non è infinito. Per aggirare quello che uso sempre cpio, che legge i nomi dei file dallo stdin. Con il --format=ustarparametro per ottenere un file tar POSIX, e nel tuo caso dovresti reindirizzare l'output gzipper ottenere il risultato desiderato:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | cpio --create --null  --format=ustar \
   | gzip > /tmp/saas_archive_logs.tar.gz

Posso specificare ore e minuti quando utilizzo il codice?
Radek,

Ho provato prima di pubblicare il mio commento ma ... "trova: non riesco a capire come interpretare" 201302050000 "come data o ora"
Radek,

@Radek La risposta breve è Sì. Userei AAAAMMGGThhmm per non avere a che fare con gli spazi. La lunga risposta: man find ti dirà: le specifiche temporali sono interpretate come per l'argomento dell'opzione -d della data GNU e con la data man troverai... a mostly free format human readable date string ..... A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers
Anthon,

@Radek grazie per aver segnalato l'errore, dal momento che non ho potuto modificare il mio commento, ho reinserito uno nuovo con un Tinserito tra i giorni e le ore. Che ho testato e funziona. In qualche modo findnon sa come dividere la stringa altrimenti (probabilmente perché potrebbe essere YYMMDDhhmmss invece di YYYYMMDDhhmm. Pensavo che quella data avrebbe bisogno di un punto per i secondi ( .ss) ma che probabilmente è solo per impostare la data.
Anthon

4

È possibile controllare il findcomando per ottenere un elenco dei file che devono essere tarati. È possibile specificare una data di inizio e di fine (fino a secondi precisione) utilizzando i normali -atime, -btime, -mtime... argomenti in combinazione con l' -notargomento. È quindi possibile reindirizzare l'output a xargse quindi a tar. Controlla la pagina man di findper i dettagli sugli argomenti time.

Aggiornamento: come suggerito Anthon, è possibile utilizzare i modificatori +/- con -mtimeper specificare il periodo senza utilizzare -not. Ecco un esempio:

find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2

Dove d, h, m, scorrisponde rispettivamente a giorni, ore, minuti e secondi . Ciò fornirà i file modificati più recenti 5d2h3m10se più vecchi di4d0h15m20s


2
l'argomento -mtimedeve essere un offset in giorni che non è sempre a meno che l'offset non sia fissato tra i tempi di esecuzione. Puoi anche usare -mtime +Xe -mtime -Xper specificare prima e dopo X giorni fa invece di usare -not.
Anthon,

Quale sarebbe la sintassi per specificare la data e l'ora assolute?
Radek,
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.