Tengo un directorio de 30 TB con miles de millones de archivos que son formalmente todos archivos JPEG. Estoy borrando cada carpeta de archivos de esta manera:
sudo rm -rf bolands-mills-mhcptz
Este comando simplemente se ejecuta y no muestra nada si funciona o no.
Quiero ver cómo está eliminando archivos o cuál es el estado actual del comando.
rm
progress-information
Junaid Farooq
fuente
fuente
rm -ri
. ¡Será divertido!Respuestas:
Puede utilizar
rm -v
pararm
imprimir una línea por archivo eliminado. De esta manera, puede ver querm
efectivamente está trabajando para eliminar archivos. Pero si tiene miles de millones de archivos, todo lo que verá es querm
todavía funciona. No tendrá idea de cuántos archivos ya se eliminaron y cuántos quedan.La herramienta
pv
puede ayudarlo con una estimación del progreso.http://www.ivarch.com/programs/pv.shtml
Así es como invocaría
rm
conpv
salida de ejemploEn este ejemplo artificial dije
pv
que hay1000
archivos. La salida depv
muestra que 562 ya están eliminados, el tiempo transcurrido es de 7 segundos y la estimación para completar es de 5 segundos.Alguna explicación:
pv -l
hacepv
contar por nuevas líneas en lugar de bytespv -s number
le dicepv
cuál es el total para que pueda darle una estimación.logfile
final es para una salida limpia. De lo contrario, la línea de estado depv
se mezcla con la salida derm -v
. Bonificación: tendrá un archivo de registro de lo que se eliminó. Pero cuidado, el archivo se volverá enorme. También puede redirigir a/dev/null
si no necesita un registro.Para obtener el número de archivos puede usar este comando:
Esto también puede llevar mucho tiempo si hay miles de millones de archivos. También puede usar
pv
aquí para ver cuánto ha contadoAquí dice que tardó 4 segundos en contar 278k archivos. El recuento exacto al final (
278044
) es la salida dewc -l
.Si no desea esperar el recuento, puede adivinar el número de archivos o usarlo
pv
sin estimación:De esta manera, no tendrá una estimación para terminar, pero al menos verá cuántos archivos ya están eliminados. Redireccionar a
/dev/null
si no necesita el archivo de registro.Nitpick:
sudo
?rm -r
es suficiente para eliminar de forma recursiva. No hay necesidad derm -f
.fuente
pv
, suponiendo que no sea demasiado costoso contar los miles de millones de archivos ;-). (¡Podría tomar casi tanto tiempo comorm
se supone que debe medir!)pv
actualiza la barra de progreso solo una vez por segundo, a pesar de su entrada. Por lo tanto, el terminal solo necesita mostrar una línea en lugar de una tonelada cada segundo.pv
solo necesita incrementar un contador por cada nueva línea que encuentre; eso tiene que ser más rápido que hacer un ajuste de línea, y más para mostrar una línea en una terminal. Creo que correr depv
esta manera hace que la eliminación de archivos sea más rápida que simplementerm -rv
.rm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
Mira la respuesta de lesmana , es mucho mejor que la mía, especialmente el último
pv
ejemplo, que no tomará mucho más tiempo que el silencio originalrm
si lo especificas en/dev/null
lugar delogfile
.Suponiendo que su
rm
soporte admite la opción (probablemente lo haga ya que está ejecutando Linux), puede ejecutarlo en modo detallado con-v
:Como se ha señalado por varios comentaristas, esto podría ser muy lento debido a la cantidad de salida que genera y muestra el terminal. En su lugar, podría redirigir la salida a un archivo:
y mira el tamaño de
rm-trace.txt
.fuente
Otra opción es ver disminuir la cantidad de archivos en el sistema de archivos. En otra terminal, ejecute:
El recuento de inodos usados disminuirá a medida
rm
que avance. (A menos que los archivos tengan en su mayoría múltiples enlaces, por ejemplo, si el árbol se creó concp -al
). Esto rastrea el progreso de eliminación en términos de número de archivos (y directorios).df
sin-i
rastreará en términos de espacio utilizado.También puede ejecutar
iostat -x 4
para ver operaciones de E / S por segundo (así como kiB / s, pero eso no es muy relevante para E / S de metadatos puros).Si tiene curiosidad sobre en qué archivos
rm
está trabajando actualmente, puede adjuntarle un archivostrace
y observar cómo lasunlink()
llamadas del sistema (y las respuestas) se escuchan en su terminal. por ejsudo strace -p $(pidof rm)
. Puedes^c
separar el stracerm
sin interrumpirlo.Olvidé si
rm -r
cambia el directorio en el árbol que está eliminando; si es así, podrías mirar/proc/<PID>/cwd
. A/proc/<PID>/fd
menudo puede tener un directorio fd abierto, por lo que puede ver eso para ver quérm
está viendo actualmente su proceso.fuente
df -ih
es de hecho una buena forma barata de ver elrm
progreso./boot
partición del sistema EFI.Si bien lo anterior responde a todo uso
rm
, enrm
realidad puede ser bastante lento para eliminar una gran cantidad de archivos, como recientemente observé cuando extraer ~ 100K archivos de un archivo .tar en realidad tomó menos tiempo que eliminarlos. Aunque esto en realidad no responde la pregunta que hizo, una mejor solución a su problema podría ser utilizar un método diferente para eliminar sus archivos, como una de las respuestas a esta pregunta .Mi método favorito personal es usar
rsync -a --delete
. Me parece que este método funciona lo suficientemente rápido como para que valga la facilidad de uso sobre la respuesta más votada a esa pregunta , en la que el autor ha escrito un programa en C que necesitaría compilar. (Tenga en cuenta que esto generará todos los archivos que se procesan en stdout, de manera similarrm -rv
; esto puede ralentizar el proceso en una cantidad sorprendente. Si no desea esta salida, usersync -aq --delete
o redirija la salida a un archivo).El autor de esa respuesta dice:
He descubierto que esto es lo suficientemente bueno para mis propósitos. También es potencialmente importante a partir de esa respuesta, al menos si está usando ext4:
fuente
rm
y / ofind --delete
ser eficiente. Punto interesante sobre la eliminación en orden de clasificación para evitar reequilibrios de b-tree durante la eliminación. No estoy seguro de cuánto se aplica a otros sistemas de archivos. XFS tampoco es excelente con millones de archivos por directorio. IDK sobre BTRFS, pero tengo la impresión de que podría ser bueno para ese tipo de cosas.Una cosa que podría hacer sería iniciar el
rm
proceso en segundo plano (sin salida, por lo que no se ralentizará) y luego monitorearlo en primer plano con un simple comando (a) :El
find/wc
combo podría reemplazarse con cualquier herramienta capaz de darle las unidades que desea.(a) Bueno, relativamente simple, en comparación con, digamos, la física nuclear, la hipótesis de Riemann o qué comprarle a mi esposa para Navidad :-)
fuente
Hace un tiempo escribí algo para imprimir la tasa de impresión de las líneas. Puede ejecutar
rm -rfv | ./counter
e imprimirá líneas por segundo / min. Aunque no es un progreso directo, le dará algunos comentarios sobre la tasa de progreso, ¿tal vezrm
se haya metido en un sistema de archivos de red o similar?El enlace al código está aquí:
http://www.usenix.org.uk/code/counter-0.01.tar.gz
fuente