Wenn ich diesen Suchbefehl ausführe:
find /html/car_images/inventory/ -type f -iname \*.jpg -mtime -4
ich bekomme eine Ausgabe wie diese:
/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
Mein Ziel ist es, einen „Thumbnail“-Ordner zu löschen, der in jedem dieser Verzeichnisse vorhanden ist (d. h. diesen Ordner zu löschen: /html/car_images/inventory/16128/thumbnails/ und auch löschen/html/car_images/inventory/16115/thumbnails/
Ich denke vielleicht an ein Skript, das jede Zeile der Ausgabe des obigen Find-Befehls übernimmt und dann "*.jpg" durch "thumbnails" und füge als Präfix "rm -fr" hinzu, sodass ich am Ende Folgendes erhalte:
rm -fr /var/www/html/car_images/inventory/16115/thumbnails/
rm -fr /var/www/html/car_images/inventory/16128/thumbnails/
und so weiter...
Irgendwelche Ideen, wie das geht? (Vielleicht mit der Option -exec von find und sed oder cut?)
(eine andere Möglichkeit, mein gesamtes Ziel auszudrücken, ist: Wenn ein Ordner eine JPG-Datei enthält, die „jünger“ als X Tage ist, dann löschen Sie den Ordner „Thumbnails“ in diesem Ordner.)
Antwort1
Angenommen, Sie haben keine Dateinamen mit Zeilenumbrüchen:
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
Die Parametererweiterung
${1%/*}
extrahiert aus jedem gefundenen Eintrag den Teil ohne den Dateinamensort -u
sortiert und dann die Einträge eindeutig macht, so dass wir keine Duplikate habenxargs -I{} rm -r {}/thumbnails
fügtthumbnails
am Ende hinzu, und entfernen Sie dann das resultierende Verzeichnis
Antwort2
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)
Dies wird durch eine Prozesssubstitution innerhalb einer Prozesssubstitution erreicht.
Es findet Dateien basierend auf OP-Kriterien, ruft den Verzeichnisnamen jeder JPG-Datei in einer While-Schleife ab, sortiert und entfernt Duplikate (inspiriert von @heemayl) und liest diese dann in einer While-Schleife, um das Miniaturbildverzeichnis zu entfernen.