GNU/Linux >> Tutoriales Linux >  >> Linux

¿Eliminar miles de millones de archivos de un directorio mientras se ve el progreso también?

Tengo un directorio de 30 TB que contiene miles de millones de archivos que formalmente son todos archivos JPEG. Estoy eliminando cada carpeta de archivos como este:

sudo rm -rf bolands-mills-mhcptz

Este comando simplemente se ejecuta y no muestra nada, ya sea que esté funcionando o no.

Quiero ver como esta borrando archivos o cual es el estado actual del comando.

Respuesta aceptada:

Puede usar rm -v tener rm imprime una línea por archivo eliminado. De esta manera puedes ver que rm de hecho está trabajando para eliminar archivos. Pero si tiene miles de millones de archivos, todo lo que verá es que rm todavía está trabajando 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ías rm con pv con salida de ejemplo

$ rm -rv dirname | pv -l -s 1000 > logfile
562  0:00:07 [79,8 /s] [====================>                 ] 56% ETA 0:00:05

En este ejemplo artificial le dije a pv que hay 1000 archivos La salida de pv muestra que 562 ya se eliminaron, el tiempo transcurrido es de 7 segundos y la estimación para completar es de 5 segundos.

Alguna explicación:

  • pv -l hace pv para contar por saltos de línea en lugar de bytes
  • pv -s number le dice a pv cuál es el total para que pueda darle una estimación.
  • La redirección a logfile al final es para una salida limpia. De lo contrario, la línea de estado de pv se mezcla con la salida de rm -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 la cantidad de archivos, puede usar este comando:

$ find dirname | wc -l

Esto también puede llevar mucho tiempo si hay miles de millones de archivos. Puedes usar pv aquí también para ver cuánto ha contado

$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [     <=>                                              ]
278044

Aquí dice que tardó 4 segundos en contar 278k archivos. El recuento exacto al final (278044 ) es la salida de wc -l .

Si no desea esperar el conteo, puede adivinar la cantidad de archivos o usar pv sin estimación:

$ rm -rv dirname | pv -l > logfile

Así no tendrás estimación para terminar pero al menos verás cuantos archivos ya están borrados. Redirigir a /dev/null si no necesita el archivo de registro.

Relacionado:¿Cómo agregar datos al búfer en el script de shell?

Critica:

  • realmente necesitas sudo ?
  • generalmente rm -r es suficiente para eliminar recursivamente. no es necesario rm -f .

Linux
  1. ¿Cómo obtener un recuento de archivos en un directorio usando la línea de comando?

  2. ¿Cómo mover archivos y ver el progreso (por ejemplo, con una barra de progreso)?

  3. ¿Cuál es la mejor manera de contar el número de archivos en un directorio?

  4. Cómo identificar usuarios que eliminan archivos de un directorio determinado en Linux

  5. Examen de archivos Berkeley DB desde la CLI

Cómo buscar archivos desde la Terminal en Linux

Cómo excluir un directorio al buscar archivos en Linux

Migración de un servidor Linux desde la línea de comandos

Contando el número de archivos en un directorio usando C

¿Cómo mover todos los archivos del directorio actual al directorio superior?

¿Dónde está el directorio temporal en Linux?