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.