¿Cómo encontrar carpetas pequeñas que no estén vacías?

¿Cómo encontrar carpetas pequeñas que no estén vacías?

Me gustaría encontrar (luego eliminar) todas las carpetas de música que están casi vacías (Banshee elimina solo los archivos de música pero no los demás archivos allí).

Probé con:

find -type d -size -500k \;

Pero también muestra carpetas que contienen archivos más grandes.

find -type d -size -500k -exec du {} \;

Muestra el tamaño correcto.

¿Cómo modificar el cmd de búsqueda para mostrar solo carpetas que sean más pequeñas que N?

Respuesta1

Un comando que uso, siempre y cuando no necesites canalizar esto directamente a otro script, es

Du. | ordenar -rn

Esto colocaría las carpetas más pequeñas al final de la lista impresa junto con sus tamaños. Se necesitaría un poco más de trabajo para filtrar los que son más grandes.

Respuesta2

Si simplemente desea eliminar carpetas que contienen menos de N bytes, la siguiente línea funcionará:

du | awk '$1 <= 500 { print "rm -rf \"" substr($0, length($1)+2) "\""}' | sh

¿Qué hace esto? Consecutivamente:

  • duimprime tamaños de directorios junto con sus rutas
  • $1 <= 500es una condición que prueba si la primera columna tiene menos de 500 (si tiene menos de 500 bytes)
  • printen impresiones extrañasrm -rf "/path/to/small/dir"
  • | shlo canaliza a sh para que pueda ejecutarse

También puedes hacerlo usando xargs en lugar de canalizarlo a sh, pero estoy acostumbrado a esta manera.

información relacionada