¿Es posible ver la velocidad cp y el porcentaje copiado?
251
Tengo problemas al copiar archivos grandes usando nautilus (se atasca). Necesito copiar, usando cp. Me gustaría saber si hay algún parámetro que muestre el% copiado y también la velocidad de transferencia.
Podrías usar en rsynclugar de cp. Tiene una --progressopción.
frostschutz
2
Midnight Commandertambién funciona bien y tiene una interfaz de usuario bastante basada en texto con barras de progreso, pero podría no estar instalada. Pruebe mcen el símbolo del sistema. Además, obviamente, no lo es cp.
un CVn
3
Usar rsynccon --progresssolo me hizo descubrir lo que está sucediendo. Se atasca cuando alcanza el 100%, y luego dura un par de minutos. Creo que es lo mismo que está sucediendo con nautilus. De todos modos, esa es otra pregunta, por lo que la mejor respuesta para esta pregunta es rsync --progress: muestra el tamaño, el%, la velocidad y el tiempo transcurrido.
yzT
2
Un problema con rsync es que se ejecuta más lentamente que una copia pura. En mi gran servidor, la diferencia es de 60 MB / sy 300 MB / s, respectivamente.
pdwalker
1
@pdwalker incluso con la -Wopción? en todos mis hosts rsynces casi tan rápido como cp... tan cerca que uso regularmente en rsynclugar de cp.
Skaperen
Respuestas:
193
rsynctiene una bandera llamada progress2que muestra el porcentaje general:
--info = progress2 todavía no se ha convertido en un repositorio predeterminado y aquí está 2015. Parece una buena idea.
Lonniebiz
1
--info=progress2finalmente incluido en version 3.1.0 protocol version 31. Tal vez podrías editar tu respuesta, yzT.
Sopalajo de Arrierez
1
Me di cuenta de --info=progress2que rsync es increíblemente rápido. ¡200 MB / s, mientras que Windows no supera los 90 MB / s!
ReneFroger
1
@ReneFroger, aunque esa podría ser la velocidad real (dependiendo del dispositivo), a menudo en Linux esa velocidad rápida es realmente falsa, y después de que la copia ha finalizado, el sistema sigue escribiendo en el dispositivo, a diferencia de Windows, puede expulsar el dispositivo casi inmediatamente. Si copia archivos grandes, puede notar cómo comienza a esa velocidad rápida pero luego baja hasta el estándar.
yzT
77
funcionó para mí con solo --progress. rsync versión 3.0.9
adrianTNT
103
Si permite otras herramientas que cpseguramente es posible. Para un solo archivo que puede usar pv. Es una pequeña herramienta que proporciona buenas estadísticas.
pv inputfile > outputfile
Si tiene varios archivos o directorios, puede usar tar:
tar c sourceDirectory | pv | tar x -C destinationDirectory
Puede envolverlo en una función de shell. Es menos para escribir y obtienes semántica cercana a las de cp. Aquí hay una función muy simple (¡y no a prueba de errores!):
cpstat () {
tar c "$1" | pv | tar x -C "$2"
}
Tenga en cuenta que algunas versiones de tarno admiten la sintaxis mencionada anteriormente (por ejemplo, Solaris tar) y debe usar la siguiente variante:
Esto le dará velocidad de transferencia, pero no ETA, porque pvno sabe cuántos datos ingresarán a través de la tubería. Puede especificar esto usando -s. Por ejemplo, primero hacer du -sh sourceDirectorypara tener una idea (en bruto), y luego pasarlo a pv, como esto: pv -s 100m.
Jan Fabry
1
--info = progress2 le proporciona estadísticas de progreso a nivel de directorio.
AlexLordThorsen
vbuf(debian, ubuntu) es un poco más rápido que pv, probablemente debido a su búfer de anillo virtual
Skaperen
@Skaperen no lo sé vbuf. Pero como parece, en Debian es inestable en este momento y, por lo tanto, a menudo no está disponible en los servidores que generalmente ejecutan Debian estable.
Marco
58
rsync funciona mejor para mostrar el progreso durante el progreso de la copia.
Como se explica en otras respuestas, cp no proporciona esa funcionalidad. Sin embargo, el progreso (anteriormente llamado cv) es una pequeña herramienta que es muy útil para proporcionar esta característica que falta.
Esta herramienta se puede describir como un comando Tiny Dirty Linux Only * C que busca los comandos básicos de coreutils (cp, mv, dd, tar, gzip / gunzip, cat, ...) que se ejecutan actualmente en su sistema y muestra el porcentaje de copias datos.
Lo he estado usando durante los últimos meses y es sólido.
cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch
Correr:
export FORCE_UNSAFE_CONFIGURE=1
./configure
make
Copiar los dos archivos cpy mvloacated bajo coreutils-8.21/src/a /usr/local/bin:
Noté que esta publicación era algo vieja. Pero cuando hice una solución al problema en cuestión, pensé en publicar mi solución.
Escenario: tenemos una estructura de directorios muy grande que queremos copiar, por lo que emitimos el comando cp -R sourcedir destdir en una ventana de terminal.
Abra otra ventana de terminal o empuje el proceso a un segundo plano (Ctrl+Z,bg<CR>), luego hagamos un indicador de progreso de la manera ghetto:
Primero obtenemos el tamaño total de la estructura de directorios que queremos copiar, lo hace con:
du -sh /path/sourcedirectory/
Convierta el resultado a gigabytes (G), luego sustituya el resultado por n en el tamaño de fuente variable. Una vez que haya insertado el tamaño de fuente y el destdir (directorio de destino), ejecute el siguiente comando.
while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done
Esto imprimirá el progreso cada 10 segundos con mensajes como:
Soy consciente de que esta solución no abordó la velocidad de copia, pero sería posible agregar eso expandiendo los comandos anteriores, posiblemente convirtiéndolo en un script bash para que sea más fácil de leer. Por ejemplo, comprobando cuántos datos se copian pr. n unidad de tiempo, la velocidad debe ser trivial para calcular y mostrar.
Esto es realmente perfecto para mi caso de uso, así que gracias por publicarlo. Quiero saber sobre el progreso de copiar un gran directorio con miles de archivos, no solo un archivo, por lo que las otras soluciones realmente no me ayudan.
Ibrahim
Esto es genial, especialmente en casos como el que estoy experimentando ahora: de forma remota, comencé un gran trabajo de MV para mover terrabytes de copias de seguridad de un grupo de almacenamiento a otro, sin pensar en las implicaciones de antemano. Ahora puedo fácilmente poner en segundo plano el proceso y echarle un vistazo. ¡Increíble!
Riley
8
Para mejorar la respuesta de Marco, hoy escribí esta versión de cpstat, para que pueda copiar muchos directorios y usar el último parámetro como la ruta de destino. Tenga en cuenta que si usa una ruta profunda relativa como fuente, puede, gracias a tar, crear automáticamente el mismo árbol de directorios dependiente.
function cpstat () {
tar -cf - "${@: 1: $#-1}" |
pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
tail -n 1 |
cut -d "$(echo -e "\t")" -f 1)" |
( cd "${@: $#}"; tar -xf - )
;}
Esta herramienta es un comando de utilidad de Linux que busca los comandos básicos de coreutils (cp, mv, dd, tar, gzip / gunzip, cat, etc.) que se ejecutan actualmente en su sistema y muestra el porcentaje de datos copiados:
Esto ya fue sugerido por @AmrMostafa en noviembre del '14.
Dubu
2
Acabo de tener un caso en el que cp estaba más o menos bloqueado debido a un error FUSE en el sistema de archivos receptor.
Si no puede simplemente cambiar de cp (es decir, porque --sparse = siempre) y quiere algo que sea realmente confiable para el progreso, vaya a través de / proc.
VCP: copie archivos en una interfaz de maldiciones (Mostrar la barra de progreso en Linux).
DESCRIPCIÓN: vcp copia archivos y directorios en una interfaz de maldiciones, con salida de texto solo disponible. sus opciones y resultados son similares a los del cp de BSD al tiempo que agrega algunas características nuevas.
Proporciona información sobre:
archivos copiados y dejados para copiar
datos escritos y tamaño total de datos
datos que se escriben cada segundo
dos barras de estado, una que muestra el estado actual del archivo, la otra estado total (excepto con 1 archivo, ambos muestran actual) y porcentaje
rsync
lugar decp
. Tiene una--progress
opción.Midnight Commander
también funciona bien y tiene una interfaz de usuario bastante basada en texto con barras de progreso, pero podría no estar instalada. Pruebemc
en el símbolo del sistema. Además, obviamente, no lo escp
.rsync
con--progress
solo me hizo descubrir lo que está sucediendo. Se atasca cuando alcanza el 100%, y luego dura un par de minutos. Creo que es lo mismo que está sucediendo con nautilus. De todos modos, esa es otra pregunta, por lo que la mejor respuesta para esta pregunta esrsync --progress
: muestra el tamaño, el%, la velocidad y el tiempo transcurrido.-W
opción? en todos mis hostsrsync
es casi tan rápido comocp
... tan cerca que uso regularmente enrsync
lugar decp
.Respuestas:
rsync
tiene una bandera llamadaprogress2
que muestra el porcentaje general:fuente
--info=progress2
finalmente incluido enversion 3.1.0 protocol version 31
. Tal vez podrías editar tu respuesta, yzT.--info=progress2
que rsync es increíblemente rápido. ¡200 MB / s, mientras que Windows no supera los 90 MB / s!--progress
. rsync versión 3.0.9Si permite otras herramientas que
cp
seguramente es posible. Para un solo archivo que puede usarpv
. Es una pequeña herramienta que proporciona buenas estadísticas.Si tiene varios archivos o directorios, puede usar tar:
Puede envolverlo en una función de shell. Es menos para escribir y obtienes semántica cercana a las de
cp
. Aquí hay una función muy simple (¡y no a prueba de errores!):Tenga en cuenta que algunas versiones de
tar
no admiten la sintaxis mencionada anteriormente (por ejemplo, Solaristar
) y debe usar la siguiente variante:Lo llamas así
Puede mejorarlo aún más, de modo que
pv
proporcione una estimación del tiempo restante.Otra solución (como menciona frostschutz en un comentario) es usar rsync con la
--progress
opción:fuente
pv
no sabe cuántos datos ingresarán a través de la tubería. Puede especificar esto usando-s
. Por ejemplo, primero hacerdu -sh sourceDirectory
para tener una idea (en bruto), y luego pasarlo apv
, como esto:pv -s 100m
.vbuf
(debian, ubuntu) es un poco más rápido quepv
, probablemente debido a su búfer de anillo virtualvbuf
. Pero como parece, en Debian es inestable en este momento y, por lo tanto, a menudo no está disponible en los servidores que generalmente ejecutan Debian estable.rsync
funciona mejor para mostrar el progreso durante el progreso de la copia.ex:
fuente
Como se explica en otras respuestas, cp no proporciona esa funcionalidad. Sin embargo, el progreso (anteriormente llamado cv) es una pequeña herramienta que es muy útil para proporcionar esta característica que falta.
Lo he estado usando durante los últimos meses y es sólido.
fuente
Sí, es posible mostrar el progreso del comando
cp
en el terminal.Método # 1: (uso
progress
)Abra una nueva terminal y escriba
progress
que mostrará el progreso delcp
comando y otros comandos como:cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg
Si no lo ha instalado
progress
, puede instalarlo desde el repositorio, por ejemplo en elCentOS
con este comando:yum -y install progress
.Luego, después de ejecutar el
cp
comando en segundo plano, o después de ejecutarcp
normalmente, abra otra terminal, así que solo pruebe este comando:Ver salida:
Método # 2: (use parche
cp
)O descargue el GNU
coreutils
y parchelo.Correr:
Copiar los dos archivos
cp
ymv
loacated bajocoreutils-8.21/src/
a/usr/local/bin
:O cópielo usando su administrador de archivos como root
Agregue las siguientes líneas a su
~/.bashrc
:Cerrar sesión e iniciar sesión
La barra de progreso se puede mostrar sin el
–g
o–progress-bar
según lo recomendado por el autorVer salida:
Fuente: linuxhelp
fuente
cp
parche: web.archive.org/web/20131115171331/http://beatex.org/web/…progress
comandoNoté que esta publicación era algo vieja. Pero cuando hice una solución al problema en cuestión, pensé en publicar mi solución.
Escenario: tenemos una estructura de directorios muy grande que queremos copiar, por lo que emitimos el comando cp -R sourcedir destdir en una ventana de terminal.
Abra otra ventana de terminal o empuje el proceso a un segundo plano
(Ctrl+Z,bg<CR>)
, luego hagamos un indicador de progreso de la manera ghetto:Primero obtenemos el tamaño total de la estructura de directorios que queremos copiar, lo hace con:
du -sh /path/sourcedirectory/
Convierta el resultado a gigabytes (G), luego sustituya el resultado por n en el tamaño de fuente variable. Una vez que haya insertado el tamaño de fuente y el destdir (directorio de destino), ejecute el siguiente comando.
Esto imprimirá el progreso cada 10 segundos con mensajes como:
Soy consciente de que esta solución no abordó la velocidad de copia, pero sería posible agregar eso expandiendo los comandos anteriores, posiblemente convirtiéndolo en un script bash para que sea más fácil de leer. Por ejemplo, comprobando cuántos datos se copian pr. n unidad de tiempo, la velocidad debe ser trivial para calcular y mostrar.
fuente
Para mejorar la respuesta de Marco, hoy escribí esta versión de
cpstat
, para que pueda copiar muchos directorios y usar el último parámetro como la ruta de destino. Tenga en cuenta que si usa una ruta profunda relativa como fuente, puede, gracias atar
, crear automáticamente el mismo árbol de directorios dependiente.fuente
No en una versión estándar de
cp
.Puede poner en segundo plano el cp y enumerar el tamaño mientras espera a
cp
que termine.Uso este perl para monitorear el crecimiento de un solo archivo pero se ejecuta externamente al cp (o lo que sea que esté haciendo)
fuente
Encontré esto para usar, funcionó muy bien:
de un comentario de Mike sobre la pregunta de cómo verificar el progreso de ejecutar cp
fuente
Aunque
rsync
le dará algunas estadísticas de progreso, si desea una barra de progreso, debe usarlapv
.Puede usar
cpv
un contenedor parapv
una sintaxis más fácil, más similar a lacp
que puede usar para copiar directorios de forma recursivaPuedes conseguirlo aquí
fuente
pv
. Buen hallazgo!Usar una herramienta como
mc
(comandante de medianoche) puede ser una buena opción alternativa a otras respuestas.Es un administrador de archivos simple que muestra el progreso de copiar / mover.
fuente
dd status=progress
Opción agregada en GNU Coreutils 8.24+ (Ubuntu 16.04):
Stdout es una línea actualizada periódicamente como:
Vea también: ¿Cómo monitorea el progreso de dd? El | Pregúntale a Ubuntu
fuente
Otra solución simple es simplemente mirar la carpeta de salida de la siguiente manera:
Linux / Cygwin:
watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>
FreeBSD:
gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>
Esta práctica utilidad se ejecutará
du
y resaltará las diferencias.Otra solución potencial sería escribir una secuencia de comandos simple que repita, llamando
du
y escupiendo una estimación aproximada del rendimiento.fuente
Esta herramienta es un comando de utilidad de Linux que busca los comandos básicos de coreutils (cp, mv, dd, tar, gzip / gunzip, cat, etc.) que se ejecutan actualmente en su sistema y muestra el porcentaje de datos copiados:
https://github.com/Xfennec/cv
fuente
Acabo de tener un caso en el que cp estaba más o menos bloqueado debido a un error FUSE en el sistema de archivos receptor.
Si no puede simplemente cambiar de cp (es decir, porque --sparse = siempre) y quiere algo que sea realmente confiable para el progreso, vaya a través de / proc.
fuente
Página de manual de VCP: https://linux.die.net/man/1/vcp
Descargue vcp-2.2.tar.gz desde:
http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz
Dependencia: curses.h (libncurses-dev).
En Ubuntu, instale:
o
INSTALE vcp:
Manual:
fuente