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 -vpararmimprimir una línea por archivo eliminado. De esta manera, puede ver quermefectivamente está trabajando para eliminar archivos. Pero si tiene miles de millones de archivos, todo lo que verá es quermtodavía funciona. No tendrá idea de cuántos archivos ya se eliminaron y cuántos quedan.La herramienta
pvpuede ayudarlo con una estimación del progreso.http://www.ivarch.com/programs/pv.shtml
Así es como invocaría
rmconpvsalida de ejemploEn este ejemplo artificial dije
pvque hay1000archivos. La salida depvmuestra 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 -lhacepvcontar por nuevas líneas en lugar de bytespv -s numberle dicepvcuál es el total para que pueda darle una estimación.logfilefinal es para una salida limpia. De lo contrario, la línea de estado depvse 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/nullsi 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
pvaquí 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
pvsin 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/nullsi no necesita el archivo de registro.Nitpick:
sudo?rm -res 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 comormse supone que debe medir!)pvactualiza 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.pvsolo 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 depvesta 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) > logfileMira la respuesta de lesmana , es mucho mejor que la mía, especialmente el último
pvejemplo, que no tomará mucho más tiempo que el silencio originalrmsi lo especificas en/dev/nulllugar delogfile.Suponiendo que su
rmsoporte 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
rmque 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).dfsin-irastreará en términos de espacio utilizado.También puede ejecutar
iostat -x 4para 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
rmestá trabajando actualmente, puede adjuntarle un archivostracey observar cómo lasunlink()llamadas del sistema (y las respuestas) se escuchan en su terminal. por ejsudo strace -p $(pidof rm). Puedes^cseparar el stracermsin interrumpirlo.Olvidé si
rm -rcambia el directorio en el árbol que está eliminando; si es así, podrías mirar/proc/<PID>/cwd. A/proc/<PID>/fdmenudo puede tener un directorio fd abierto, por lo que puede ver eso para ver quérmestá viendo actualmente su proceso.fuente
df -ihes de hecho una buena forma barata de ver elrmprogreso./bootpartición del sistema EFI.Si bien lo anterior responde a todo uso
rm, enrmrealidad 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 --deleteo 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
rmy / ofind --deleteser 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
rmproceso en segundo plano (sin salida, por lo que no se ralentizará) y luego monitorearlo en primer plano con un simple comando (a) :El
find/wccombo 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 | ./countere imprimirá líneas por segundo / min. Aunque no es un progreso directo, le dará algunos comentarios sobre la tasa de progreso, ¿tal vezrmse 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