De lo contrario, ¿hay alguna utilidad de línea de comando alternativa que pueda lograr esto?
De lo contrario, ¿hay alguna utilidad de línea de comando alternativa que pueda lograr esto?
Respuestas:
Si bien cpno tiene esta funcionalidad, puede usar pvpara hacer esto:
pv my_big_file > backup/my_big_file
Nota: este método perderá los permisos y la propiedad del archivo. Los archivos copiados de esta manera tendrán los mismos permisos que si los hubiera creado usted mismo y le pertenecieran.
En este ejemplo, pvbásicamente solo genera el archivo en stdout *, que redirige a un archivo utilizando el >operador. Simultáneamente, imprime información sobre el progreso en el terminal cuando lo hace.
Esto es lo que parece:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
Es posible que necesite instalar pv (alternativamente, escriba
sudo apt-get install pv) en su sistema.
*: El bit técnico
Hay tres flujos importantes de datos en un sistema tipo Unix: stdout (salida estándar), stderr (error estándar) y stdin (entrada estándar). Cada programa tiene los tres, por así decirlo. El >operador de redirección redirige la salida del programa a un archivo. Sin argumentos, como puede ver arriba, >redirige la salida estándar de un programa a un archivo. cpbásicamente no hace nada más elegante que
cat source > destination
(donde catsolo lee un archivo y lo imprime en stdout). pves como cat, pero si redirige su flujo de salida a otro lugar, imprimirá información de progreso en stdout.
Echa un vistazo man pvpara obtener más información al respecto.
Otra opción, como sugiere
DoR en esta respuesta , es usar rsync en su lugar:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
Esto preservará los permisos / propiedad de los archivos mientras muestra el progreso.
alias cp="rsync -avz"cp está desactualizado.
pv, puedes ir a espiar /proc/PID of cp/fdy /proc/PID of cp/fdinfodescubrir el progreso. (Depende de usted inferir velocidad). Utilizo esta técnica para mirar updatedb.
-zprobablemente solo debería usarse para copias de red; comprimir y descomprimir los datos para una copia local es pura sobrecarga.
rsyncasegúrese de no agregar el final /a la ruta de origen (o eliminar si, por ejemplo, la finalización de bash lo coloca allí automáticamente). De lo contrario, obtendrá resultados diferentes que cuando usa cp(o gcp).
No hay Vea aquí por qué. Aunque hace más de lo que necesita, rsynctiene un --progressparámetro. El -amantendrá permisos, etc., y -hserá legible por humanos.
rsync -ah --progress source destination
La salida se verá más o menos así:
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-rbandera de directorios recurrentes. Incluso puede ser alias como un reemplazo directo para cp:alias cp="rsync -ah --progress"
--progresshace que mi cabeza gire 🙃 mirando toda la pantalla de salida en el terminal. Entonces, aquellos que vienen aquí de búsquedas de palabras clave de AOL, rsync -ah --info=progress2 [source] [destination] presentan el resultado de una manera un poco más sensata 👩⚕️ en mi humilde opinión.
Si desea ver si sus archivos se están transfiriendo correctamente, puede usar gcpy gcpes como cp, pero por defecto le da una barra de progreso para que pueda ver lo que se está copiando. Como señala la wiki del programa , gcptiene varias características útiles como
- indicación de progresión de transferencia
- copia continua en caso de error (pase al siguiente archivo)
- copia del registro del estado: gcp registra todas sus acciones para que sea posible saber qué archivos se han copiado correctamente
- cambio de nombre para manejar las limitaciones del sistema de archivos de destino (por ejemplo, eliminación de caracteres incompatibles "*" o "?" en FAT)
Sin embargo, incluso cuando la barra de progreso haya alcanzado el 100% al usar la herramienta, debe esperar hasta que vuelva a aparecer el indicador de terminal antes de quitar sus medios de manera segura para asegurarse de que el proceso de transferencia haya finalizado con éxito.
gcpse usa para copiar archivos y tiene opciones tales como --preservepara que se puedan preservar varios atributos y permisos y --recursivepara que se puedan copiar directorios completos. Puede encontrar más información sobre sus opciones ingresando man gcpo visitando las páginas de manual de Ubuntu en línea . Un tutorial también está disponible en este sitio .
Instalar gcpdesde los repositorios con
sudo apt-get install gcp
( Nota : en Ubuntu 12.10, el nuevo punto de montaje automático es, por ejemplo /media/user/usbdisk)
Puede copiar un archivo a su medio ingresando
gcp /home/mike/file.mp4 /media/usb
y copie una carpeta a sus medios con
gcp -rv ~/Podcasts /media/Mik2
Salida de muestra gcpcon la barra de progreso:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
Por supuesto, puede especificar múltiples archivos o carpetas para copiar en su disco, y hay muchas otras opciones cubiertas man gcp.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0antes de iniciar gcp. Si la máquina no tiene cabeza, entonces tendría que iniciar una sesión x en un framebuffer virtual o algo así, en ese momento probablemente debería buscar otro programa
gcpes bastante decente pero el requisito de DBUS / X es extraño. Manejé esto sobre SSH usando el reenvío ssh: ssh -X user@hosty eso me permitió ejecutarlo.
Me encanta usar cURL para este propósito exacto. La página de manual enumera el protocolo "ARCHIVO" como compatible, así que úselo como cualquier otro protocolo en una URL:
curl -o destination FILE://source
Velocidad, progreso, tiempo restante y más, todo en un formato familiar.
pv, que no va a salvar permisos.
Si bien no muestra la velocidad, al copiar varios archivos, la -vopción del cpcomando le proporcionará información de progreso. p.ej
cp -rv old-directory new-directory
El núcleo conoce la mayoría de los datos, como la velocidad y, a menudo, también el porcentaje. Los núcleos modernos exponen esto a través de su sistema de archivos / proc.
showpeed de https://github.com/jnweiger/showspeed usa esa información. Se puede adjuntar a programas que ya se están ejecutando y proporcionar actualizaciones periódicas como esta:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 ddpara ddmostrar su estado, otra opción sería watch -n 1 pkill -USR1 ddhacer que muestre su progreso periódicamente (cada segundo).
Hay una herramienta llamada progressen los repositorios que puede examinar varios comandos diferentes y mostrar información de progreso para ellos.
Instálalo usando el comando
sudo apt-get install progress
Esta herramienta se puede usar así:
cp bigfile newfile & progress -mp $!
Salida:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
Si bien pvpuede ocuparse de cptareas locales , el uso ddde pvpuede ocuparse tanto de tareas locales ( cp) como remotas ( scp).
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Por favor, asegúrese de las path/to/dest.mkvsalidas portouch path/to/dest.mkv
Esto puede mostrar el progreso, pero si desea la información del porcentaje,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Reemplace 100Marriba con el tamaño real de su archivo fuente.
Mientras que scpdifícilmente puede mostrar el progreso actual, utilizando ddcon pves un pedazo de pastel.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Hay una nueva herramienta llamada cv que puede encontrar cualquier descriptor relacionado con un comando en ejecución y mostrar el progreso y la velocidad: https://github.com/Xfennec/cv
cv -w
genera las estadísticas para todas las operaciones de cp, mv, etc. en ejecución
watch cv -qes aún más
cpestá copiando un directorio de forma recursiva o no.
Como muchos dijeron, cp no incluye esta funcionalidad.
Solo para arrojar mis $ 0.02, lo que generalmente hago con situaciones de copia triviales (es decir, no -R):
Vea qué tan grande es el archivo y recuerde
Comience a copiar
Abre otra terminal
Ejecutar watch ls -lh DIRen el directorio donde está el objetivo
Esto me puede mantener actualizado sobre el tamaño del archivo de destino, con una molestia mínima.
Como alternativa para situaciones menos triviales, por ejemplo, copiando directorios de forma recursiva, puede usar watch du -hs DIRpara ver un resumen del tamaño de DIR. Sin embargo, du puede tomar mucho tiempo para calcular e incluso puede ralentizar la copia, por lo que es posible que desee utilizar un -n INTERVALargumento para observar para que la compensación sea aceptable.
Actualización: en caso de que utilice comodines con el comando utilizado con watch du, por ejemplo watch du -hs backup/*, no olvide citar:
watch "du -hs backup/*"
de lo contrario, los comodines se expandirán solo una vez , cuando se inicie la observación, por lo que no mirará nuevos archivos / subdirectorios.
dd status=progress
Opción agregada en GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
El terminal muestra una línea de tipo:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Vea también: ¿Cómo monitorea el progreso de dd?
Si tiene rsync 3.1 o superior ( rsync --version), puede copiar (cp -Rpn) mientras conserva los permisos y la propiedad, los directorios recurrentes, "no clobber" y muestra el progreso general (en lugar de solo el progreso por archivo), la velocidad de copia y ( muy aproximado) tiempo estimado restante con:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Tenga en cuenta que sudo solo es necesario si se trata de directorios / archivos que no son de su propiedad. Además, sin el --no-i-r, el porcentaje puede restablecerse a un número inferior en algún momento durante la copia. Tal vez las versiones posteriores de rsync estarán predeterminadas en no-ir con info = progress2, pero no en la versión actual de 3.1.2.
Descubrí que el porcentaje y el tiempo restante se sobrestiman enormemente al copiar en un directorio que ya contiene archivos (es decir, como cuando normalmente usaría cp -n "no clobber").
Use un script de shell:
#!/bin/sh
cp_p()
{
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
}
Esto se verá así:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Dependiendo de lo que quieras hacer, Midnight Commander ( mc) podría ser la respuesta. Me sorprende que aún no se haya mencionado.
Las herramientas les gusta pvo rsyncson buenas para mostrar el progreso de la transferencia de un archivo enorme, pero cuando se trata de copiar directorios / árboles completos, mccalcula el tamaño y luego muestra el progreso muy bien. Además, está disponible de fábrica en la mayoría de los sistemas.
podría ser una opción más para preservar los atributos (si sourcees una carpeta en la que se creará destination)
tar -c source | pv -e -t -p -r | tar -C destination -x
Espero que pueda ser útil para alguien. Para tener un tiempo de transferencia estimado, esto se puede lograr haciendo do -s sourcede antemano y pasándolo como un -s <size>parámetro a pv.
-f -Es redundante. tarLa salida predeterminada cy la entrada para xson stdout y stdin.
Verifique el código fuente de progress_bar en el repositorio de git a continuación
https://github.com/Kiran-Bose/supreme
Prueba también el paquete de script bash personalizado supremo
Descargue el archivo deb e instálelo en una distribución basada en debian o descargue los archivos fuente, modifíquelos y utilícelos para otras distribuciones
Resumen de funcionalidad
(1) Aplicaciones abiertas ---- Firefox ---- Calculadora ---- Configuración
(2) Administrar archivos ---- Buscar ---- Navegar ---- Acceso rápido
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Administrar teléfono ---- Mover / Copiar desde teléfono ---- Mover / Copiar a teléfono ---- Sincronizar carpetas
(4) Administrar USB ---- Mover / Copiar desde USB ---- Mover / Copiar a USB
pv sabe cómo ver los descriptores de archivos dados un pid, ya sea cp u otra cosa
De la documentación:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
Ejemplo:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pvno maneja los permisos de la misma manera que locphace ... (basado en una prueba rápida que probé:pvno copié el bit de ejecución en ...rsyncsí.