Supongo que podría comparar la cantidad de archivos en el directorio de origen con la cantidad de archivos en el directorio de destino a medida que avanza cp, o quizás hacerlo con el tamaño de la carpeta. Traté de encontrar ejemplos, pero todas las barras de progreso de bash parecen estar escritas para copiar archivos individuales. Quiero copiar un grupo de archivos (o un directorio, si el primero no es posible).¿Cómo puedo hacer una barra de progreso (copiar cp un directorio)?
Respuesta
Puede echar un vistazo a la herramienta vcp
. Es una herramienta de copia simple con dos barras de progreso: una para el archivo actual y otra para general.
EDITAR
Aquí está el enlace a las fuentes: http://members.iinet.net.au/~lynx/vcp/ Página de manual se puede encontrar aquí: http://linux.die.net/man/1/vcp
La mayoría de las distribuciones tienen un paquete para él.
Esperaba algo que no requiera la compilación de herramientas externas. Solo quiero ver mi directorio copiarse. ¿Es realmente tan difícil? – octosquidopus
@Anonymouse agregó una segunda respuesta, tal vez esta sería una alternativa para usted. Pero esa es mi última idea :( –
Como se ha dicho a continuación, rsync está disponible en todos los sistemas (incluso de Mac OS), en contraposición a VCP. – Adrien
Aquí otra solución: Utilice la herramienta de bar
Se podría invocar esta manera:
#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}
Tienes que ir por el camino más de alquitrán, y será inexacta en archivos pequeños. También debe tener cuidado de que exista el directorio de destino. Pero es una forma.
al principio, pensé en tarring la carpeta antes de moverlo, pero pensaron que carecería demasiado en elegancia. estaba equivocado. funciona como se esperaba y en realidad podría ser una mejor solución en algunos casos. Gracias! – octosquidopus
Hay una herramienta pv
hacer esta cosa exacta: http://www.ivarch.com/programs/pv.shtml
Hay una versión de Ubuntu en el apartamento
También puede utilizar rsync
en lugar de cp
así:
rsync -Pa source destination
Qué le dará una barra de progreso y el tiempo estimado de finalización. Muy útil.
Para mostrar una barra de progreso mientras se hace una copia recursiva de archivos & carpetas & subcarpetas (incluyendo enlaces y atributos de archivo), se pueden utilizar gcp
(fácilmente instalado en Ubuntu y Debian ejecutando "sudo apt-get install GCP") :
gcp -rf SRC DEST
Aquí está la salida típica al copiar una gran carpeta de archivos:
Copying 1.33 GiB 73% |##################### | 230.19 M/s ETA: 00:00:07
en cuenta que se muestra sólo una barra de progreso para toda la operación, mientras si quieres una sola barra de progreso por archivo, puede utilizar rsync
:
rsync -ah --progress SRC DEST
gcp está basado en Python. POR FAVOR NO UTILICE EN PRODUCCIÓN. No revisé, pero parece que no admite enlaces duros, atributos especiales, etc. – socketpair
gcp no funciona en un terminal remoto (por ejemplo, a través de ssh). –
Un manera sencilla Unix es ir al directorio de destino y hacer watch -n 5 du -s
. Quizás hacerlo más bonito mostrándose como un bar. Esto puede ayudar en entornos en los que solo tiene las utilidades estándar de Unix y no tiene el alcance de instalar archivos adicionales. du-sh es la clave, ver es solo hacer cada 5 segundos. Pros: funciona en cualquier sistema Unix Contras: No Barra de progreso
Mi opción preferida es Advanced Copy, ya que utiliza los cp
archivos originales.
$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
$ tar xvJf coreutils-8.21.tar.xz
$ cd coreutils-8.21/
$ wget --no-check-certificate https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
$ patch -p1 -i advcpmv-0.5-8.21.patch
$ ./configure
$ make
Los nuevos programas se encuentran ahora en src/cp y src/mv. Usted puede optar por reemplazar sus comandos existentes:
$ sudo cp src/cp /usr/local/bin/cp
$ sudo cp src/mv /usr/local/bin/mv
El enlace al parche en zwicke.org está roto pero está en github en https://github.com/atdt/advcpmv. Quizás alguien con más habilidades que yo actualizará los pasos de @ elboletaire. – Setaa
Puedo hacerlo, gracias por los enlaces al parche – elboletaire
¿Qué tal algo así como
find . -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /DEST/$(dirname {})
Se encuentra todos los archivos en el directorio actual, tuberías que a través de PV mientras que da PV un tamaño estimado de manera el medidor de progreso funciona y luego conectarlo a un comando CP con la bandera --parents para que la ruta DEST coincida con la ruta SRC.
Un problema que todavía tienen que superar es que si se emite este comando
find /home/user/test -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /www/test/$(dirname {})
la ruta de destino se convierte en/www/test/home/usuario/test/ARCHIVOS .... ... y yo No estoy seguro de cómo decirle al comando que se deshaga de la parte '/ home/user/test'. Por eso tengo que ejecutarlo desde el directorio de SRC.
Para añadir otra opción, puede utilizar cpv
. Utiliza pv
para imitar el uso de cp
.
Funciona como pv
pero se puede utilizar para copiar recursivamente directorios
Se puede conseguir here
- 1. Cómo copiar varios archivos desde un directorio diferente usando cp?
- 2. Cómo hacer una barra de progreso
- 3. ¿Cómo copiar un directorio en un Makefile?
- 4. Hacer un directorio y copiar un archivo
- 5. ¿Cómo hacer una barra de progreso personalizada en Android?
- 6. ¿Cómo copiar un archivo en Python con una barra de progreso?
- 7. ¿Cómo puedo agregar una barra de progreso a WWW :: Mechanize?
- 8. cómo codificar una barra de progreso
- 9. ¿Cómo puedo hacer que una barra de progreso de winforms se mueva verticalmente en C#?
- 10. ¿Cómo puedo hacer una barra de progreso sin fin en WinForms?
- 11. Cómo hacer que Gmail como barra de progreso de carga
- 12. barra de progreso circular
- 13. ¿Cómo hacer una barra de progreso para una NSURLConnection al descargar un archivo?
- 14. Barra de progreso de Python
- 15. wxPython barra de progreso
- 16. Barra de progreso vertical
- 17. ¿Cómo puedo cargar un archivo a través de ASP.NET MVC y mostrar una barra de progreso?
- 18. Hadoop Copiar un directorio?
- 19. ¿Puede ffmpeg mostrar una barra de progreso?
- 20. ¿Cómo hago una barra de progreso de marquesina en WPF?
- 21. ¿Cómo puedo copiar un directorio usando Boost Filesystem
- 22. Actualizar una barra de progreso en mathematica
- 23. Agregar una barra de progreso en WebView
- 24. Hacer pantalla de bienvenida con barra de progreso como Eclipse
- 25. ¿Cómo puedo usar una barra de progreso del estilo de un medidor?
- 26. Haciendo una Barra de Progreso Skinny Customizada/barra de búsqueda
- 27. Django-apio barra de progreso
- 28. Cómo copiar un directorio usando Ant
- 29. Barra de progreso para AVAssetExportSession
- 30. HTML5 Audio - Barra de progreso
Usted ha golpeado [Bash FAQ # 44] (http: // mywiki .wooledge.org/BashFAQ/044). Eche un vistazo y vea si alguna de las sugerencias es útil. – jw013