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

Find-Befehl in Bash-Skript, was zu No such file or directory error only for directorys führt?

tl;dr - Übergeben Sie -prune wenn Sie Verzeichnisse mit find löschen .

Für alle anderen, die über diese Frage stolpern. Ein Beispiel wie dieses ausführen

find /media/disk3 -type d -name .AppleDouble -exec rm -rf {} \;

führt zu einem Fehler wie

rm: cannot remove 'non_existent_directory': No such file or directory

Beim Suchen und Löschen von Verzeichnissen mit find tritt dieser Fehler häufig auf, weil find speichert das Verzeichnis, um Unterverzeichnisse zu verarbeiten, und löscht es dann mit exec , versucht dann, die nicht mehr existierenden Unterverzeichnisse zu durchlaufen.

Sie können entweder -maxdepth 0 übergeben oder -prune um dieses Problem zu verhindern. So:

find /media/disk3 -type d -name .AppleDouble -prune -exec rm -rf {} \;

Jetzt löscht es die Verzeichnisse ohne Fehler. Hurra! :)


Sie müssen DOT in Shell Glob nicht entkommen, da dies keine Regex ist. Verwenden Sie also .AppleDouble statt \.AppleDouble :

find $DIRTY_DIR -name .AppleDouble -exec rm -rf '{}' \;

PS: Ich sehe nirgendwo $COUNTER in Ihrem Skript inkrementiert wird.


Linux
  1. schwerwiegender Fehler openssl/evp.h:Keine solche Datei oder Verzeichnis:[Gelöst]

  2. Kann nicht ausgeführt werden Keine solche Datei oder Verzeichnis [Fix]

  3. Behebt schwerwiegenden Fehler openssl err.h – Keine solche Datei oder kein Verzeichnis [OpenCA]

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

  5. So vermeiden Sie den Fehler „Keine solche Datei oder Verzeichnis“ für das Makefile-Ziel „make clean“.

Wie man den Alias-Befehl in einem Bash-Skript oder einer Bashrc-Datei zum Laufen bringt

Kein solcher Datei- oder Verzeichnisfehler beim Ausführen einer Binärdatei

Bash ignoriert Fehler für einen bestimmten Befehl

Fehler mit gradlew:/usr/bin/env:bash:Keine solche Datei oder Verzeichnis

Der conda-Befehl zeigt den Fehler an:Bad Interpreter:No such file or directory

Warum gibt Bash keine solche Datei oder kein solches Verzeichnis für ein Programm an, das sich in meinem PATH befindet?