Linux Buscar para eliminar archivos en carpetas

Linux Buscar para eliminar archivos en carpetas

el objetivo es encontrar directorios con el nombre de pila y eliminar todos los archivos dentro de ellos, manteniendo los directorios reales

find /home/www/sites/ -iname '_cache' -exec du -hs {} \;

esto me da una lista de archivos con su tamaño

204K    /home/www/sites/test.site.com/html/development/Temporary/_cache
904K    /home/www/sites/test.site2.com/html/development/Temporary/_cache

¿Es posible lograrlo con el comando de búsqueda de Linux?

Respuesta1

Intenté algo y parece que está funcionando. Es una solución similar a la que Alex publicó aquí.

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -exec rm {} \;

Debería eliminar sólo los archivos que se encuentran en el directorio _cache y sólo en este directorio. No eliminará ningún archivo de los subdirectorios del directorio _cache.

Por supuesto, pruébalo antes de usarlo y en lugar de rm, pon allí ls o algo inofensivo.

Respuesta2

No he probado a fondo esta lógica... pero podrías hacer algo dentro de un bucle como:

for findname in $(find /path/to/search -name '_pattern')
do
  find $findname -type f
done

De esta manera, obtiene la lista de archivos que coinciden con su patrón de búsqueda y luego recorre cada uno de ellos con una nueva búsqueda en busca de archivos para eliminar.

La forma en que está escrito le dará una lista de archivos, por lo que puede redirigirlo a un archivo y luego recorrerlo con un rm. También puede agregar un ejecutivo a la búsqueda con el bucle for. Sin duda, recomendaría ejecutar primero como está escrito para probar la lógica y asegurarse de que las coincidencias se vean bien.

Respuesta3

Comando correcto para borrarlo.

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -delete 

Respuesta4

buscar tiene una opción -eliminar. Esto eliminará cualquier coincidencia.

Desde la página de manual

-borrar

          Delete files; true if removal succeeded.  If the removal failed,
          an  error message is issued.  If -delete fails, find's exit stat-
          us will be nonzero (when it eventually exits).  Use of  -delete
          automatically turns on the -depth option.

          Warnings:  Don't  forget that the find command line is evaluated
          as an expression, so putting -delete first will make find try to
          delete everything below the starting points you specified.  When
          testing a find command line that you later intend  to  use  with
          -delete,  you should explicitly specify -depth in order to avoid
          later surprises.  Because -delete  implies  -depth,  you  cannot
          usefully use -prune and -delete together.

información relacionada