Terminal mostrerà una barra di avanzamento quando copio con "cp"?


33

È possibile visualizzare una barra di avanzamento quando si copiano i file nel Terminale usando cp?


2
... potresti anche prendere in considerazione l'utilizzo rsyncinvece.
Asmus,

C'è un modo per farlo con una barra di avanzamento generale senza installare strumenti di terze parti? Forse una sceneggiatura o qualcosa del genere?
rraallvv,

Risposte:


49

È possibile utilizzare invece rsync.

rsync --progress /copy/from /copy/to

1
Speedwise, che è più veloce, rsync o cp?
daviesgeek,

Se tutti i file che vengono copiati non esistono nella destinazione, non penso che ci sarà una differenza evidente. Se alcuni dei file esistono nella destinazione, varierà perché rsync esegue alcuni controlli. Rsync di solito (ma non sempre) sarà più veloce in quel caso.
bahamat,

2
L'uso rsync -P /copy/from /copy/toequivale al rsync --partial --progress /copy/from /copy/toquale visualizzerà l'avanzamento della copia e riprenderà il trasferimento se è disconnesso.
gh0st

E proprio come cp, ha bisogno della -rbandiera per non saltare le directory
Alexander - Reinstate Monica

21

Durante cp, CtrlTvisualizza la percentuale corrente (almeno su macOS)


è fantastico!
felix021,

1
Il motivo per cui funziona è perché Ctrl-tinvia SIGINFOsegnali nello stesso modo in cui Ctrl-cinvia SIGINTsegnali. Ad esempio, è possibile utilizzare un loop in un'altra shell per ripetere ripetutamente kill -INFOil processo in questione se non si desidera continuare a premere i tasti. Perché è un segnale, funziona anche con altre utility, ad es dd. Ctrl-te SIGINFOsono ereditati da BSD.
HTNW,

1

Se stai copiando file o directory di grandi dimensioni utilizzando cp, puoi aprire "Activity Monitor", andare alla scheda "Disco" e cercare il processo "cp". Qui puoi tenere traccia di quanti byte sono stati scritti dall'ultimo avvio, dandoti un'idea approssimativa del progresso. (OS X 10.10).

Spero che sia d'aiuto!


0
#!/bin/sh
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0

Non è perfetto, ma funziona ... inseriscilo in un percorso di directory e chiamalo in modo simile ...


Aspetta ... come faccio a farlo funzionare ???
daviesgeek,

2
Non ricordo se OS X avesse un stracecomando al momento in cui questa risposta è stata scritta (luglio 2011), ma sicuramente non lo è oggi.
Tim Ruddick,

Qualche idea su come eseguirlo su macOS?
rraallvv,
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.