Linux Suchen zum Löschen von Dateien in Ordnern

Linux Suchen zum Löschen von Dateien in Ordnern

Das Ziel besteht darin, Verzeichnisse mit dem angegebenen Namen zu finden und alle darin enthaltenen Dateien zu löschen, wobei die tatsächlichen Verzeichnisse erhalten bleiben

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

Dadurch bekomme ich eine Liste der Dateien mit ihrer Größe

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

ist dies mit dem Linux-Befehl „Find“ möglich?

Antwort1

Ich habe etwas ausprobiert und es scheint zu funktionieren; es ist eine ähnliche Lösung, die Alex hier gepostet hat.

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

Es sollten nur Dateien gelöscht werden, die sich im Verzeichnis _cache befinden und nur in diesem Verzeichnis. Es werden keine Dateien aus Unterverzeichnissen des Verzeichnisses _cache gelöscht.

Probieren Sie es natürlich vor der Verwendung aus und setzen Sie statt rm ls oder etwas Harmloses ein.

Antwort2

Ich habe diese Logik nicht gründlich getestet, aber Sie könnten innerhalb einer Schleife Folgendes tun:

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

Sie erhalten also die Liste der Dateien, die Ihrem Suchmuster entsprechen, und können dann jede dieser Dateien mit einer neuen Suche nach zu löschenden Dateien durchsuchen.

So wie es geschrieben ist, erhalten Sie eine Liste von Dateien, sodass Sie diese in eine Datei umleiten und diese dann mit einem rm durchlaufen können. Sie können auch ein Exec an die Suchschleife anhängen. Ich würde auf jeden Fall empfehlen, es zuerst wie geschrieben auszuführen, um die Logik zu testen und sicherzustellen, dass die Übereinstimmungen gut aussehen.

Antwort3

Korrekter Befehl zum Löschen

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

Antwort4

find hat die Option -delete. Diese löscht alle Übereinstimmungen.

Aus der Manpage

-löschen

          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.

verwandte Informationen