GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Löschen Sie Dateien und Verzeichnisse anhand ihrer Namen. Keine solche Datei oder Ordner?

Ich muss alle kompilierten Daten löschen:

  • Verzeichnisse namens build ,
  • Verzeichnisse namens obj ,
  • *.so-Dateien.

Ich habe einen Befehl geschrieben

find ( -name build -o -name obj -o -name *.so ) -exec rm -rf {} ;

das geht rekursiv durch alle Verzeichnisse und löscht alles, was ich brauche.

Warum habe ich so eine Ausgabe am Ende?
Vielleicht sollte ich einen anderen Befehl schreiben.

find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory

Akzeptierte Antwort:

Verwenden Sie -prune in den Verzeichnissen, die Sie sowieso löschen werden, um find mitzuteilen sich nicht die Mühe zu machen, Dateien darin zu finden:

find . ( -name build -o -name obj -o -name '*.so' ) -prune -exec rm -rf {} +

Beachten Sie auch, dass *.so muss in Anführungszeichen gesetzt werden, da es sonst von der Shell auf die Liste von .so erweitert werden kann Dateien im aktuellen Verzeichnis.

Das Äquivalent Ihres GNU -regex -Typ eins wäre:

find . ( -name build -o -name obj -o -name '*?.so' ) -prune -exec rm -rf {} +

Beachten Sie, dass Sie, wenn Sie eine GNU-spezifische Syntax verwenden möchten, auch -delete verwenden können statt -exec rm -rf {} + . Mit -delete , GNU find schaltet -depth ein automatisch. Es führt keine externen Befehle aus, also ist es auf diese Weise effizienter und auch sicherer, da es die Race-Bedingung beseitigt, bei der jemand Sie möglicherweise dazu bringen kann, die falschen Dateien zu entfernen, indem er zwischenzeitlich ein Verzeichnis in einen symbolischen Link ändert find findet eine Datei und rm entfernt (siehe info -f find -n 'Security Considerations for find'). für Einzelheiten).

find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+.so)' -delete

Linux
  1. Finden Sie Dateien und Verzeichnisse in Linux wie ein Profi

  2. So löschen Sie Dateien und Verzeichnisse in Linux über die Befehlszeile

  3. Dateien durch Lesen ihrer Dateinamen in verschiedene Verzeichnisse verschieben?

  4. So finden und löschen Sie leere Verzeichnisse und Dateien in Unix

  5. So finden und löschen Sie leere Verzeichnisse und Dateien in Linux

So kopieren Sie Dateien und Verzeichnisse unter Linux

Älteste Datei finden und löschen, wenn mehr als X Dateien in einem Verzeichnis in Linux vorhanden sind

So finden und löschen Sie Dateien, die einen bestimmten Text in ihrem Namen in Linux enthalten

Zwei Befehle zum einfachen Auffinden von Dateien und Verzeichnissen in Debian 11

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

Finden Sie Dateien und drucken Sie nur ihre übergeordneten Verzeichnisse