51 05/04/2026 07/04/2026 7 min

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 --version

Se 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/destinazione

Se i filesystem sono diversi, il comando può impiegare più tempo, ma mv normalmente non offre una barra nativa utile. In pratica hai tre strade:

  1. usare mv -v per vedere i file spostati;
  2. se il caso è un grosso spostamento tra filesystem, usare rsync + rimozione della sorgente solo dopo verifica;
  3. 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/archiviare

Il 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.tar

Questo 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 /dati

e 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.iso

Oppure con tar:

tar -cf - /dati | pv | tar -xf - -C /destinazione

Per installarlo, dipende dalla distro:

sudo apt install pv
sudo dnf install pv
sudo yum install pv

progress è 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 -m

Il 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.iso

In 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.