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.