informazioni sullo stato di avanzamento tramite pv per la copia della directory


14

Devo copiare una directory molto grande (parlando qui in terabyte) e voglio monitorare i progressi.

Ho scoperto che pvè una bella utility, ma come posso usarla per copiare ricorsivamente le directory? ( pv src > dstnon funziona perché sono directory)

PS: in esecuzione su OS X Mountain Lion, è pvstato installato da Mac Ports

Risposte:


21

Uso rsync --progress [SRC] [DST]

Controlla la man rsyncpagina perché ha molte opzioni molto utili. -aper archivio è un buon inizio, ma dipende dalle tue esatte esigenze.

La copia attraverso una pipe rallenta inutilmente il processo di copia, specialmente se si basa su file.


Perché la copia attraverso una pipe rallenta il processo? Il buffering fornito dalle pipe e il multi-tasking associato alle pipe probabilmente aiuteranno le cose che direi. (e rsync è multi-processi e utilizza pipe IIRC internamente). Che cos'è un processo di copia che non è basato su file?
Stéphane Chazelas,

Bash è conveniente, ma non veloce. Soprattutto quando si esegue il piping di un comando all'altro.
jippie,

@StephaneChazelas: Perché il buffer di una pipe è solo 8 KB. Un programma come rsync potrebbe voler utilizzare un buffer interno molto più grande.
Zan Lynx,

10

È possibile utilizzare taro paxo cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)

1
Inoltre, è possibile aggiungere va al tarcomando per vedere i nomi dei file.
peterph

Quindi questo comprimerà la cartella di origine prima di fare la copia, giusto? La mia cartella ha una dimensione di 5 TB, quindi non sono sicuro che questo sia il modo migliore per farlo? Mi piace molto usare il PV in quanto mostra un ottimo stato di avanzamento, qualche consiglio per favore?
Tak

@Tak, no non comprime nulla in quanto non c'è compressione. tar cf -genera un flusso contenente i file e i loro metadati, che viene inviato attraverso una pipe a pv che lo alimenta non toccato all'altro tardurante la stampa di un'indicazione di avanzamento e l'altro tarestrae i dati in quel flusso. Tutti e tre i comandi vengono eseguiti contemporaneamente ed elaborano i dati così come vengono, non c'è nulla memorizzato sul disco, non c'è nulla memorizzato nella memoria oltre ai buffer delle pipe e ai buffer interni dei comandi che ammontano a pochi kilobyte.
Stéphane Chazelas,

@ StéphaneChazelas Grazie per il commento. L'ho provato e funziona, l'unica cosa è che la barra di avanzamento non mostra la percentuale prevista che continua da sinistra a destra. Qualche idea sul perché? Ho usato pv con questi parametri -petra che di solito mostra la barra di avanzamento in cui la barra continuava a riempirsi fino al termine. Ho votato anche la tua risposta.
Tak

@Tak, pvnon ha modo di sapere quanti dati ci sono da trasferire. Se hai una stima di tale importo, puoi passarglielo con l' -sopzione (GNU du -sb srcti darebbe una buona approssimazione se i file sono abbastanza grandi)
Stéphane Chazelas

2

Catrame.

tar -cf - /var/log/ | pv | tar -C . -x

Esempio:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 

1

Ecco alcuni comandi per copiare le directory con le informazioni sull'avanzamento.


Se ci sono molti piccoli file:

cp -av sourcedir targetdir | pv -l -s filecount > logfile

Questo riporterà l'avanzamento in base al numero di file copiati.

Puoi reindirizzare a /dev/nullse non ti serve logfile.

Utilizzare il comando seguente per ottenere filecount:

find sourcedir | wc -l

Se ci sono alcuni file enormi:

tar c sourcedir | pv -s size | tar x -C targetdir

Questo riporterà l'avanzamento in base ai byte copiati.

targetdir deve esistere.

Utilizzare il comando seguente per ottenere size:

du -sh sourcedir

Se vuoi usare rsync:

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

Ottieni filecountcome mostrato sopra.

Se stai copiando sullo stesso sistema, allora rsync -aè praticamente lo stesso di cp -a. I vantaggi di rsync sono quando si copia in rete o se si aggiorna (o si confronta) una copia precedente.

Vedi qui per maggiori dettagli:


0

È possibile eseguire un'operazione du -b /directory/sia sull'origine che sulla destinazione mentre è in corso un normale comando di copia e confrontare i due. Questo è altrettanto efficace e non rallenta il processo di copia spingendolo attraverso una pipe.


-1
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%

3
Spiega il tour solutipon, vorrai che OP sia in grado di checo (e apprendere)
vonbrand,
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.