Cuando ejecuto este comando de búsqueda:
find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4
obtengo un resultado como este:
/html/car_images/inventory/16031/16031_06.jpg
/html/car_images/inventory/16117/16117_01.jpg
/html/car_images/inventory/16126/16126_01.jpg
/html/car_images/inventory/16115/16115_01.jpg
/html/car_images/inventory/16128/16128_02.jpg
/html/car_images/inventory/16128/16128_03.jpg
/html/car_images/inventory/16128/16128_04.jpg
Mi objetivo es eliminar una carpeta de "miniaturas" que existe en cada uno de estos directorios (es decir, eliminar esta carpeta: /html/car_images/inventory/16128/thumbnails/ y también borrar/html/car_images/inventory/16115/thumbnails/
Quizás estoy pensando en un script que tome cada línea de salida del comando de búsqueda anterior y luego reemplace "*.jpg" con "miniaturas" y agrega como prefijo "rm -fr" de modo que termino con esto:
rm -fr /var/www/html/car_images/inventory/16115/thumbnails/
rm -fr /var/www/html/car_images/inventory/16128/thumbnails/
etcétera...
¿Alguna idea sobre cómo hacer esto? (¿Quizás usando la opción -exec de buscar y sed o cortar?)
(otra forma de expresar mi objetivo es, si una carpeta contiene un archivo .jpg que es "más reciente" que X días, eliminar la carpeta "miniaturas" en su carpeta)
Respuesta1
Suponiendo que no tiene nombres de archivos con nuevas líneas:
find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4 \
-exec sh -c 'echo "${1%/*}"' _ {} \; | sort -u | \
xargs -d $'\n' -I{} rm -r {}/thumbnails
La expansión del parámetro
${1%/*}
extrae la parte sin el nombre de archivo de cada entrada encontrada.sort -u
ordena y luego hace que las entradas sean únicas para que no tengamos ningún duplicadoxargs -I{} rm -r {}/thumbnails
agregathumbnails
al final y luego elimina el directorio resultante
Respuesta2
while read dir;
do
rm -r "$dir"/thumbnails;
done < <(while read file; do dirname "$file"; done < <(find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4) | sort -u)
Esto se completa utilizando una sustitución de proceso dentro de una sustitución de proceso.
Encuentra archivos según criterios OP, obtiene el nombre de directorio de cada archivo jpg en un bucle while, clasifica y elimina duplicados (inspirado en @heemayl), luego lo lee en un bucle while para eliminar el directorio de miniaturas.