Al mover directorios grandes usando mv
, ¿hay alguna forma de ver el progreso (%)? El cp
comando en gentoo tenía un -g
interruptor que mostraba el progreso.
command-line
mv
progress-information
letronje
fuente
fuente
Respuestas:
Puede construir un cp y un mv parcheados que luego admiten el modificador -g para mostrar el progreso. Hay instrucciones y parches en esta página . Sin embargo : la página te indica que hagas
que sobrescribe el original cp y mv. Esto tiene dos desventajas: en primer lugar, si un paquete actualizado de coreutils llega a su sistema, se sobrescribe. En segundo lugar, si la versión parcheada tiene un problema, podrían romper los scripts que dependen de cp y mv estándar. Prefiero hacer algo como esto:
que copia los archivos a / usr / local / bin que está destinado a los programas compilados por el usuario y les da un nombre diferente. Entonces, cuando quieres una barra de progreso, dices
mvg -g bigfile /mnt/backup
y usas mv normalmente.También puede hacerlo
alias mvg="/usr/local/mvg -g"
, solo necesita decirmvg bigfile /mnt/backup
y obtener directamente la barra de progreso.fuente
No me gusta la idea de sobrescribir binarios de coreutil cuando hay soluciones más simples, así que aquí están las mías:
rsync : Rsync copia archivos y tiene un
-P
interruptor para una barra de progreso. Entonces, si tiene instalado rsync, puede usar un alias simple en su archivo de puntos de shells:La desventaja es que rsync es un poco más lento que cp, pero debes medir esto con el tiempo y decidir por ti mismo, puedo vivir con eso :-)
Shell Script : Un script de shell también puede crear la barra de progreso. Encontré esto hace un tiempo en la red y no recuerdo la fuente:
Esto se verá así:
bar :
bar
es un pequeño script de shell para mostrar una barra de proceso para todo tipo de operaciones (cp, tar, etc.). Puede encontrar ejemplos en la página de inicio del proyecto.También está escrito para el caparazón de bourne, por lo que se ejecutará cerca de todas partes.
fuente
bar
no se envuelvemv
todavía.rsync
no reemplazamv
(el OP pregunta) por completo, especialmente cuando se trata de copias rápidas en sistemas de archivos de copia en escritura comobtrfs
.Hay una nueva herramienta llamada
progress
que puede encontrar cualquier descriptor relacionado con un comando en ejecución y mostrar el progreso y la velocidad: disponible aquígenera las estadísticas para todas las operaciones de cp, mv, etc. en ejecución
fuente
progress
después de la instalación y me presentó el progreso delmv
comando que estaba esperando actualmente. ¡Gracias!sudo
(el mismo usuario, supongo). También puedes usarwatch
para decir lo que sucede cada 2 segundos:watch progress -w
watch progress -w
usted también puede simplemente usarprogress -m
Puede usar el comando del visor de tuberías
pv
para mostrar la barra de progreso:A menudo uso esto para copiar un archivo grande en un sistema de archivos de red montado (combinar con
gzip
ytar
). El inconveniente es que solo puede copiar un archivo y no un directorio. Y debe darle un nombre al nuevo archivo, no puede simplemente darle al directorio de destino como locp
hace. Sin embargo, copiar nopv
es el propósito. Es una herramienta poderosa y hace mucho más que simplemente copiar archivos. Vea la página de inicio para más ejemplos depv
.Una opción mucho mejor es usar
rsync -aP
. Si lo deseamv
, agregue la bandera--remove-source-files
. Agregue esto a su.bashrc
si desea usar los comandos con frecuencia:La desventaja aquí es que rsync solo muestra el progreso, no una barra de progreso.
fuente
tar cf - source-dir | pv | tar xf - -C out-dir
le dará el rendimiento de un directorio completo. Si conoce el tamaño y pasa-s
a pv, también puede darle progreso.Si su objetivo es mover / copiar un directorio con barra de progreso, pero evitando la GUI no terminal, mc (Midnight Commander) es una buena opción.
fuente
Mi solución es usar
rsync
. Puede copiar directorios, eliminar los archivos de origen después de una copia exitosa (por lo tanto, "moverlos") y mostrar informes de progreso, entre muchas otras características (especialmente la sincronización de directorios parcialmente copiados y el trabajo en la red).Así es como movería un directorio con rsync, con informe de progreso:
Asegúrese de
$src
no no terminar en una barra invertida, de lo contrario obtendrá un significado diferente que el de GNUcp
.Se
rm -r
necesita al final porque--remove-source-files
solo elimina los archivos de origen, después de que cada uno se copia correctamente, no los directorios. Se&&
asegura de ejecutarlo solo si rsync se completa con éxito. Si eres paranoico, puedes reemplazarlo con algún tipo de recursivormdir
, comofind $src -d -exec rmdir {} +
La única falla es que la
-P
opción muestra el progreso para cada archivo, no para toda la operación de copia. Esto podría ser inútil si está intentando mover un directorio con muchos archivos pequeños. La última versión de desarrollo de rsync tiene un indicador alternativo--info=progress2
que muestra el progreso de toda la operación.fuente
Para evitar parches de Coreutil para agregar una barra de progreso
mv
ycp
,gcp
(Goffi's CoPier) es una nueva alternativa: http://wiki.goffi.org/wiki/Gcp/enUsar de la misma manera que
cp
con las opciones-r
de recursividad y-v
de verbosidad.Utiliza una cola de archivos cuando se invocan varios comandos simultáneamente. También permite grabar nombres de archivos copiados en un registro, consulte la sección de la página del manual de guardado de Fuente para más detalles.
Aquí hay un buen tutorial para comenzar
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/fuente
En primer lugar: nunca copio archivos grandes sin usar ionice, a menos que sepa que no querré usar la computadora durante media hora o más.
Segundo: todas mis particiones se agrupan, por lo que la copia intrapartición no lleva tiempo. Si es una copia larga, hago un
du -sm
en los archivos ydf -m | grep copy_to_partition
. Entonces, si tengo curiosidad por cuánto tiempo más me llevará, lo vuelvo a hacerdf
y veo cuánto de los archivos se copiaron.fuente
En mi Mint, me gusta usar gcp en esto o en la solución curl (que es realmente agradable)
Es posible que deba instalarlo
sudo apt-get install gcp
Y una tarea muy agradable y excelente para la barra de progreso con información sobre
en un buen formato legible es:
Además, es posible que deba instalarlo primero
sudo apt-get install curl
fuente
gcp
no admite el movimiento del archivo, es decir, los archivos de origen deben eliminarse manualmente después de una copia exitosa.Esto no le da una barra de progreso, pero presione
CTRL-T
y enviará un correo electrónicoSIGINFO
amv
, que informará en qué archivo está trabajando y qué tan avanzado está el proceso. Es bastante útil tener esto para transferencias de archivos grandes, posiblemente no tan útil para una transferencia con muchos archivos pequeños.Ejemplo rápido:
fuente
INFO: unknown signal; killall -l lists signals.
creo que SIGINFO solo está en algunos BSD, no en POSIX estándar.Utilícelo
mv -v
para imprimir una línea por archivo movido epv -l
imprimir el progreso en función del recuento de líneas (en efecto, recuento de archivos).Necesitará
pv
(visor de tuberías): http://www.ivarch.com/programs/pv.shtmlUse el siguiente comando para obtener el recuento de archivos:
Este comando mostrará información de progreso en función del número de archivos copiados. Esto funciona mejor si hay muchos archivos pequeños. Si solo hay unos pocos archivos que son enormes, entonces no te divertirás mucho.
Tenga
mv
en cuenta que en la misma partición debe ser rápido.mv
a otra partición sería lo mismocp source target
seguido porrm source
. Así que aquí hay dos comandos para copiar directorios con información de progreso.para informar el progreso en función del número de archivos copiados:
para informar el progreso en función de los bytes copiados:
Consulte aquí para obtener más detalles: información de progreso a través de pv para la copia del directorio
fuente
Invariablemente, termino buscando esta respuesta después de iniciar el comando 'mv', en cuyo punto no quiero comenzar de nuevo. Si se encuentra en esta situación, una forma muy simple de monitorear el progreso (o para ver si está lo suficientemente lejos como para que no valga la pena matar) es ejecutar:
Esto solo imprimirá el tamaño del directorio para que pueda ver cuántos datos se han copiado, o puede ejecutarlo un par de veces para ver qué tan rápido se transfieren los datos.
fuente