Mostrare l’avanzamento di cp, mv, tar, rsync e scp in Linux
Su Linux il problema è sempre lo stesso: un comando sta lavorando, ma non sai se è fermo, lento o semplicemente occupato su un file enorme. La differenza tra un trasferimento che va avanti e uno bloccato la fai con pochi strumenti ben scelti. Il punto non è solo “vedere una barra”, ma capire cosa il comando supporta davvero, quali opzioni esistono e quando serve cambiare approccio.
In pratica, cp, mv e tar non offrono sempre un avanzamento nativo utile in tutte le distribuzioni e versioni. rsync è il più completo per i trasferimenti, mentre scp oggi ha qualche opzione, ma resta meno flessibile di rsync. Quando vuoi monitorare operazioni lunghe, conviene distinguere tra:
- avanzamento nativo del comando;
- output verboso che mostra i file in lavorazione;
- strumenti esterni che agganciano il processo senza modificarlo;
- alternative migliori per il caso d’uso.
cp: avanzamento nativo solo in versioni recenti
Su molte distribuzioni moderne cp supporta --progress oppure, in alcune versioni di GNU coreutils, -v per vedere i file copiati. Il problema è che il verbose non è un vero progresso percentuale: ti dice quale file è stato gestito, non quanto manca per finirlo.
Verifica subito cosa supporta il tuo sistema:
cp --help | grep -E -- '--progress|progress|verbose'
cp --versionSe trovi --progress, puoi usarlo così:
cp --progress file_grande.iso /destinazione/Atteso: una stima dell’avanzamento per il file in copia. Se invece non c’è, il fallback è usare un wrapper esterno come pv oppure cambiare strumento, soprattutto se stai copiando un singolo file molto grande.
Per copie di directory intere, cp -r non è pensato per fornire una progressione precisa. In quel caso il vantaggio reale è limitato. Se ti serve vedere l’avanzamento in modo affidabile, spesso rsync è la scelta più pulita.
mv: di solito non mostra progresso, perché spesso è un rename
mv è particolare: se sorgente e destinazione sono sullo stesso filesystem, non copia i dati, ma fa un rename quasi istantaneo. In quel caso non ha senso parlare di percentuale di avanzamento. Se invece sposta tra filesystem diversi, diventa una copia seguita da una cancellazione, e allora il trasferimento può richiedere tempo.
Controllo rapido:
df -T /percorso/sorgente /percorso/destinazioneSe i filesystem sono diversi, il comando può impiegare più tempo, ma mv normalmente non offre una barra nativa utile. In pratica hai tre strade:
- usare
mv -vper vedere i file spostati; - se il caso è un grosso spostamento tra filesystem, usare
rsync+ rimozione della sorgente solo dopo verifica; - per singoli file grandi, usare strumenti con progresso esplicito.
Il verbose di mv ti dice cosa è stato spostato, non quanto manca. Se devi gestire molte directory o file pesanti, meglio pianificare il trasferimento con un tool che espone progresso e retry.
tar: il trucco è usare verbose o una pipe con pv
tar non nasce per mostrare una barra di progresso. Il suo output verboso può stampare i file processati, ma anche qui non hai una percentuale nativa standard. Per vedere cosa sta facendo, il primo livello è:
tar -cvf archivio.tar /percorso/da/archiviareIl flag -v mostra i file mentre vengono aggiunti o estratti. È utile, ma non dice quanto manca. Per un’indicazione più concreta, il metodo più comune è inserire pv nella pipeline, quando puoi stimare la dimensione totale del flusso.
Esempio di creazione archivio con avanzamento:
tar -cf - /dati | pv -s $(du -sb /dati | awk '{print $1}') > archivio.tarQuesto schema va usato con attenzione: la stima di du -sb è buona, ma non perfetta se cambiano i dati durante l’operazione. Inoltre, per estrazione e compressione il flusso può complicarsi. Un’alternativa semplice è usare:
tar -cvf archivio.tar /datie affiancare il monitoraggio del processo con strumenti di sistema come top, iotop o controlli sul file di output che cresce nel tempo.
Se il tuo obiettivo è fare backup, il punto non è solo vedere il progresso, ma avere un archivio consistente e verificabile. In quel caso conviene ragionare anche su checksum, log e restore test.
rsync: la scelta migliore per progresso, ripresa e controllo
rsync è il riferimento pratico quando vuoi trasferimenti con avanzamento leggibile. Ha output dettagliato, può mostrare percentuali, velocità, ETA e totale. Per questo è spesso preferibile a cp e mv in scenari reali di amministrazione.
Comando base con progresso:
rsync -avh --progress sorgente/ destinazione/Se vuoi una vista più compatta e utile su trasferimenti grandi, molte versioni supportano:
rsync -avh --info=progress2 sorgente/ destinazione/Questa opzione mostra il progresso complessivo dell’intera operazione, non solo del singolo file. È molto più leggibile quando copi molte directory o migliaia di file.
Vantaggi concreti di rsync:
- mostra avanzamento dettagliato;
- può riprendere meglio in caso di interruzione;
- trasferisce solo le differenze, se usato per sincronizzazione;
- si presta bene a copie locali e remote via SSH.
Attenzione però: rsync non è una copia “cieca” come cp. Ha logica di sincronizzazione. Se vuoi replicare fedelmente un albero, devi capire bene opzioni come -a, --delete, trailing slash e permessi. Una barra bella non basta se poi la semantica della sincronizzazione è sbagliata.
scp: utile, ma meno comodo di rsync per il progresso
scp è ancora usato molto, ma per i trasferimenti lunghi rsync è spesso superiore. Su molte implementazioni moderne di OpenSSH, scp mostra un output di progresso di base, ma non sempre è dettagliato o uniforme quanto rsync.
Uso tipico:
scp file_grande.iso utente@host:/destinazione/Su alcune versioni puoi vedere il progresso con output interattivo. Se vuoi più controllo, puoi verificare il comportamento con:
scp -v file_grande.iso utente@host:/destinazione/Il verbose di scp è però orientato al debug della connessione, non alla telemetria del trasferimento. Se il tuo obiettivo è monitorare bene un upload o un download, rsync via SSH è quasi sempre la scelta più solida.
Se devi solo fare una copia rapida e non ti serve sincronizzazione, scp va bene. Se invece ti servono reinvio, ripresa, statistiche e controllo, meglio passare a rsync.
Strumenti esterni: pv e progress
Quando il comando non ha un progresso utile, puoi agganciare uno strumento esterno. I due più noti sono pv e progress.
pv è ideale per pipe e stream. Mostra il flusso di dati che passa attraverso la pipeline. Esempio:
pv file_grande.iso > /destinazione/file_grande.isoOppure con tar:
tar -cf - /dati | pv | tar -xf - -C /destinazionePer installarlo, dipende dalla distro:
sudo apt install pv
sudo dnf install pv
sudo yum install pvprogress è un tool che monitora processi già in esecuzione e prova a stimare l’avanzamento di comandi come cp, mv, tar e rsync leggendo i file aperti o i dati trasferiti. È utile quando non vuoi cambiare il comando lanciato.
progress -mIl limite è che non sempre riesce a interpretare bene ogni processo o ogni versione del comando. Quindi va bene come strumento di supporto, non come unica base operativa.
Scelta pratica per scenario
Se devi copiare un singolo file grande in locale e hai una versione di cp con supporto al progresso, usa quello. Se non ce l’hai, valuta pv.
Se devi spostare file tra filesystem diversi, mv non è il comando più trasparente: usa rsync per la copia, verifica il risultato, poi rimuovi la sorgente solo quando sei sicuro.
Se devi creare o estrarre archivi, tar -v ti dà visibilità sui file, ma non una percentuale. Per pipeline grandi, pv è la soluzione più utile.
Se devi sincronizzare directory locali o remote, rsync è la scelta migliore quasi sempre. Offre il miglior compromesso tra avanzamento, recupero da errore e controllo.
Se devi trasferire via SSH e vuoi una soluzione semplice, scp va bene per usi base, ma non è il riferimento per osservabilità del trasferimento.
Comandi rapidi da ricordare
cp --progress file_grande.iso /destinazione/
cp -v sorgente destinazione
mv -v sorgente destinazione
tar -cvf archivio.tar /dati
rsync -avh --progress sorgente/ destinazione/
rsync -avh --info=progress2 sorgente/ destinazione/
scp file_grande.iso utente@host:/destinazione/
pv file_grande.iso > /destinazione/file_grande.isoIn sintesi: se vuoi davvero vedere l’avanzamento, rsync è il primo comando da considerare. cp e mv possono mostrare qualcosa, ma dipende molto dalla versione e dal caso d’uso. tar è leggibile in modalità verbose, ma per un progresso serio serve spesso pv. scp funziona, ma resta meno comodo di rsync per monitorare trasferimenti lunghi.
Assunzione: i comandi mostrati sono riferiti a GNU/Linux con strumenti standard GNU; su sistemi BSD o versioni molto vecchie alcune opzioni possono cambiare.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.