rsync: segnala solo i file caricati


14

Ho un problema con rsync: o mi mostra tutti i file nelle directory che sto sincronizzando (se uso il flag -v) o niente (quando non lo uso -v).

Vorrei avere rsync quiet ad eccezione dei file che in realtà dovevano essere caricati in remoto. C'è una bandiera per attivare questo tipo di segnalazione? Non riesco a trovare questo nella documentazione

Risposte:


11

Sì, controlla la -ibandiera. Fornisce un rapporto di ogni operazione in un formato criptico. Vedi la pagina man per la definizione esatta del formato.

Per ottenere l'elenco dei file inviati all'host remoto, è possibile utilizzare quanto segue:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
Questo riporta di nuovo tutti i file, non quelli modificati.
dangonfast,

@gonvaled No, vengono emessi solo i file inviati all'host remoto (come <fcstpoguax filename, dove i diversi flag mostrano perché devono essere aggiornati). Se riporta tutti i file, potrebbe esserci qualcosa che non va nel tuo test o nel tuo ambiente.
Oliver,

Penso che tu abbia ragione. Ho dato un'occhiata alla manpage ed è descritta come dici tu. Ma il mio sistema sta segnalando tutti i file. Forse qualcosa che non va nel lontano ...
dangonfast,

Mmmm. avvicinarsi: la stringa di reporting è (per tutti i file) <f..T....... Secondo la manpage, ciò è legato ai timestamp.
dangonfast,

1
l'utilizzo grep -E '^[^.]|^$'consentirebbe anche di far passare le linee statistiche (o avvertenze, errori, ...), rimuovendo solo le linee veramente noiose che iniziano con un punto ...
Frank Nocke,

9

rsync con un singolo in -vrealtà stampa solo i file trasferiti. Se stai ricevendo l'elenco completo ogni volta, probabilmente significa che l'algoritmo di confronto rsync src / dest predefinito, basato sul tempo di modifica + dimensione, non è adatto al tuo caso. È possibile aggiungere il flag -c( --checksum) che rende rsync confrontare i file mediante checksum. Si noti che ciò comporta ovviamente un certo sovraccarico di I / O.

Leggermente correlato è il fatto che se si utilizza --info=flistinvece di -vottenere un output più definito dei file (in pratica si salta l'intestazione e il piè di pagina -vdell'output tipico ).


1
--info=flistè disponibile solo in rsync> = 3.1, che non è disponibile ovunque. Ad esempio macOS viene fornito con un'antica versione 2.6.9 perché Rsync v3 è unter GPL 3.
chiborg

1
Mentre la voce di Apple GPL è super succosa, ricorda anche che Enterprise Linux ha una vasta gamma di supporto (14 anni) in cui le versioni sono bloccate (e ramificate) per preservare la certificazione e garantire la compatibilità (api + abi) durante la vita supportata della versione . In realtà è l'unico modo possibile per farlo, e l'effetto collaterale è che i numeri di versione appaiono vecchi e le nuove funzionalità non colpiscono l'Enterprise per quello che potrebbe sembrare un lungo periodo.
user2066657

2

una cosa che mi viene in mente è usare un formato di registro più dettagliato e scoprire ciò che vuoi ottenere.

per esempio:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

questo non è molto robusto, non gestirà bene i nomi dei file con spazi.


1

1. Utilizzare l' -iopzione

Per questi flag di modifica iconizzati (o: criptici). L'output sarà simile al seguente:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep ogni linea che inizia con un punto.

Lascia passare tutte le altre linee (anche quelle vuote, per leggibilità):

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

Ed eccoci qui :-) - Proprio quello che il medico ha ordinato:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Evitare i punti piuttosto che cercare > ha il vantaggio di lasciare passare anche le statistiche, ma anche i potenziali errori, avvertenze, ecc ...

Avere statistiche alla fine è una preferenza personale. Non usare -h --statsse non ti piacciono questi. Presumo che il tuo interesse principale sia non vedere centinaia o migliaia di file invariati scorrere di ...


0

Non penso che ci sia una bandiera per fare questo, ma potrebbe esserci ora. Ecco come l'ho fatto:

rsync -vv [other options] | grep -v 'uptodate'

1
My rsync (versione 3.0.7) non si aggiunge uptodateal reporting, quindi non è possibile filtrarlo.
dangonfast,

Voglio correggere, o almeno chiarire, cosa ha scritto Mike sopra e cosa ha sottolineato @ jeckyll2hide. Penso che il problema non sia che rsync -v non emetta più la stringa "uptodate" ma piuttosto che è necessario utilizzare rsync -vv. Nota che due contro ho appena verificato che funziona su Ubuntu 14.04 con rsync versione 3.1.0. Mike, puoi aggiornare il tuo post per riflettere questo?
John Mark Mitchell,
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.