Wie kann ich den Befehl "find" in Linux verwenden, um nicht leere Verzeichnisse zu entfernen? [geschlossen]

8

Ich habe temporäre Verzeichnisse voller Junk, die alle mit __temp__ beginnen (z. B. __temp__user_uploads ), die ich mit einer Aufräumfunktion löschen möchte. Mein Funktionsversuch ist zu laufen:

%Vor%

Wenn ich den Befehl ausführe und es mehrere __temp__ Verzeichnisse ( __temp__foo und __temp__bar ) gibt, bekomme ich die Ausgabe:

%Vor%

Wenn ich den Befehl ausführe und es nur 1 __temp__ Verzeichnis ( __temp__foo ) gibt, wird es gelöscht und ich bekomme die Ausgabe:

%Vor%

Warum funktioniert der Befehl nicht, warum ist er so inkonsistent und wie kann ich ihn beheben?

    
orokusaki 19.09.2012, 03:09
quelle

1 Antwort

25

Verwenden Sie eine Tiefensuche und geben Sie das Shell-Metazeichen * :

an %Vor%

Erläuterung

Ohne den -depth -Flag löscht Ihr find -Befehl übereinstimmende Dateinamen und versucht dann, in die (jetzt nicht verlinkten) Verzeichnisse abzusteigen. Das ist der Ursprung von "Keine solche Datei oder Verzeichnis" in Ihrem einzelnen Verzeichnis __temp__ .

Ohne das * zu zitieren oder zu entfernen, erweitert die Shell dieses Muster und vergleicht mehrere __temp__whatever -Dateinamen im aktuellen Arbeitsverzeichnis. Diese Erweiterung wird find verwirren, da zu diesem Zeitpunkt Optionen und keine Dateinamen in der Argumentliste erwartet werden.

    
pilcrow 19.09.2012, 03:14
quelle

Tags und Links