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 cp
no tiene esta funcionalidad, puede usar pv
para 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, pv
bá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. cp
básicamente no hace nada más elegante que
cat source > destination
(donde cat
solo lee un archivo y lo imprime en stdout). pv
es como cat, pero si redirige su flujo de salida a otro lugar, imprimirá información de progreso en stdout.
Echa un vistazo man pv
para 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/fd
y /proc/PID of cp/fdinfo
descubrir el progreso. (Depende de usted inferir velocidad). Utilizo esta técnica para mirar updatedb
.
-z
probablemente solo debería usarse para copias de red; comprimir y descomprimir los datos para una copia local es pura sobrecarga.
rsync
asegú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, rsync
tiene un --progress
parámetro. El -a
mantendrá permisos, etc., y -h
será 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)
-r
bandera de directorios recurrentes. Incluso puede ser alias como un reemplazo directo para cp:alias cp="rsync -ah --progress"
--progress
hace 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 gcp
y gcp
es 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 , gcp
tiene 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.
gcp
se usa para copiar archivos y tiene opciones tales como --preserve
para que se puedan preservar varios atributos y permisos y --recursive
para que se puedan copiar directorios completos. Puede encontrar más información sobre sus opciones ingresando man gcp
o visitando las páginas de manual de Ubuntu en línea . Un tutorial también está disponible en este sitio .
Instalar gcp
desde 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 gcp
con 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.0
antes 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
gcp
es bastante decente pero el requisito de DBUS / X es extraño. Manejé esto sobre SSH usando el reenvío ssh: ssh -X user@host
y 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 -v
opción del cp
comando 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 dd
para dd
mostrar su estado, otra opción sería watch -n 1 pkill -USR1 dd
hacer que muestre su progreso periódicamente (cada segundo).
Hay una herramienta llamada progress
en 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 pv
puede ocuparse de cp
tareas locales , el uso dd
de pv
puede 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.mkv
salidas 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 100M
arriba con el tamaño real de su archivo fuente.
Mientras que scp
difícilmente puede mostrar el progreso actual, utilizando dd
con pv
es 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 -q
es aún más
cp
está 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 DIR
en 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 DIR
para 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 INTERVAL
argumento 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 pv
o rsync
son buenas para mostrar el progreso de la transferencia de un archivo enorme, pero cuando se trata de copiar directorios / árboles completos, mc
calcula 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 source
es 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 source
de antemano y pasándolo como un -s <size>
parámetro a pv
.
-f -
Es redundante. tar
La salida predeterminada c
y la entrada para x
son 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] [ <=> ]
pv
no maneja los permisos de la misma manera que locp
hace ... (basado en una prueba rápida que probé:pv
no copié el bit de ejecución en ...rsync
sí.