¿Es posible verificar el progreso de la ejecución del proceso de cp? Algunos procesos responden a varias señales de KILL para que pueda verificar cuál es su estado. Sé que puedo ejecutar cp con el parámetro -v, pero qué pasa si olvido hacerlo, cp se ejecuta durante mucho tiempo y quiero saber qué archivo se está copiando o cuántos ya se copiaron.
54

while sleep 1 ; do sync ; done.Respuestas:
Sí, al ejecutar stat en el archivo de destino y el archivo local, y obtener un tamaño de archivo,
es decir
stat -c "%s" /bin/lsY obtienes el porcentaje de datos copiados al comparar los dos valores, eso es todo
En una implementación muy básica que se verá así:
fuente
En las versiones recientes de Mac OS X, puede presionar CTRL+ Tpara ver el progreso. Desde la página de manual de OSX 10.6 para cp (1) :
Golpear CTRL+ Tes equivalente a señalar el proceso actual con SIGINFO en máquinas BSD-ish, incluido OSX.
Esto funciona para dd (1) también.
No creo que Linux tenga este mecanismo SIGINFO, y no veo nada en la página de manual de GNU para cp (1) sobre las señales que se pueden usar para informar el progreso.
fuente
mvestá vivo. ¡Gracias!Cuando está copiando muchos archivos,
du -s /path/to/destinationofind /path/to/destination | wc -lle da una idea de cuánto se ha hecho.Puede averiguar qué archivo se está copiando
lsof -p1234donde 1234 es la ID del procesocp. En muchos sistemas,pgrep -x cpinforma los ID de proceso de todos los procesos en ejecución nombradoscp. Esto puede no ser muy útil ya que el orden en que se copian los archivos dentro de un directorio dado es esencialmente impredecible (en un directorio grande en Linux,ls --sort=nonese lo dirá; con un árbol de directorios, intentefind).lsof -p1234también le dice cuántos bytescpya ha leído y escrito para el archivo actual, en laOFFSETcolumna.En Linux, hay estadísticas de uso de E / S en
/proc/$pid/io(nuevamente, use el PID delcpproceso para$pidf). Elrcharvalor es el número total de bytes que el proceso ha leído, ywchares el número de bytes que el proceso ha escrito. Esto incluye no solo datos en archivos sino también metadatos en directorios. Puede comparar esa cifra con la cifra aproximada obtenida condu /path/to/source(que solo cuenta los datos del archivo).read_bytesywrite_bytessolo incluye lo que se ha leído o escrito del almacenamiento, es decir, excluye el diagnóstico del terminal y los datos que ya están en la memoria caché o que todavía están en las memorias intermedias.fuente
watch lsof -p1234watch lsof -p`pgrep -x cp`Una herramienta relativamente nueva que hace exactamente eso es el progreso (anteriormente cv [coreutils viewer]).
¿Qué es?
¿Como funciona?
fuente
Uno de mis trucos favoritos para esto (en Linux) es encontrar el PID del
cpproceso (usandops | grep cpo similar), y luego buscar/proc/$PID/fd/y/proc/$PID/fdinfo/.Esto le mostrará qué archivos ha abierto el proceso. Si quieres ver qué tan lejos del proceso está el archivo ...
El
posparámetro es la posición del puntero de lectura (o escritura), en bytes.fuente
Hay algunas cosas que puedes hacer. Puede adjuntarlo
stracepara ver qué está haciendo (¡la salida puede ser copiosa!):o podría
lsofdecirle qué archivos tiene abiertos actualmente:Si está ejecutando un gran recursivo
cp, puede usarlopwdxpara obtener el directorio de trabajo actual, que puede darle una idea de cómo está funcionando:fuente
Si bien el OP ha mencionado específicamente la capacidad de ver cómo progresa el comando "cp", hay que decir que otras utilidades son mejores para este problema en particular.
Por ejemplo:
mostrará el progreso de copiar el archivo / carpeta FROM al archivo / FOLDER TO.
Y rsync le dirá cuánto se copia (y la velocidad de transferencia) en el camino. Funciona para archivos o carpetas individuales en la misma máquina o en la red.
fuente
rsync.Lo que puede hacer es verificar los archivos en el destino.
Si sus comandos cp son similares
cp -a <my_source> <my_dest_folder>, verificaría en qué archivos ya están copiados<my_dest_folder>y cada tamaño de archivo, para que pueda ver el progreso. Si el<my_source>es un poco complejo (varias capas de directorios), entonces un pequeño script podría verificar el estado. Aunque dicho script podría consumir un poco de E / S que elcpproceso no utilizaría .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
Me gustaría agregar
cpvun pequeño contenedor parapveso que escribí que imita el uso decp.Simple y útil
Puedes conseguirlo aquí
fuente
También puede usar pipeviewer .
fuente
Uso
pv -d:( fuente )
Descubra el PID de su ejecución
cp(pidof cp), digamos que es 12345; entonces simplementeNotas:
pvcomo el mismo usuario que ejecutacp(o como root).cpestá procesando archivos pequeños en este momento, probablemente no los verá a todos en la salida (un archivo pequeño puede cerrarse demasiado rápido para quepvpueda recogerlo). Sin embargo, aparecerán algunos, así que incluso entonces podrás decir quécphace.pv -d "$(pidof cp)"podría funcionar; pero si hay más de unocpcorriendo, no funcionará. Hay unopidof -sque devuelve como máximo un PID, pero no puede estar seguro de que pertenecerá alcpproceso correcto si hay muchos.fuente
Puede enviar una señal al proceso:
Es aún más útil crear un script que sondee hasta que presione Ctrl-C o el proceso finalice:
Funciona para dd. No funciona para cp . Quizás tengas que usar otra señal. Una vez probé SIGINFO, pero ya no parece existir en la plataforma Intel.
fuente