Warum hat dieser Befehl alles gelöscht?

Warum hat dieser Befehl alles gelöscht?

Ich führe diesen Befehl auf einer Unix-Box aus:

find . name CVS -exec rm -fr {} \;

Ich wollte alle aufgerufenen Dateien CVSin allen Verzeichnissen des aktuellen Verzeichnisses löschen und es wurde alles gelöscht.

Zum Glück musste ich zur Wiederherstellung nur noch einmal aus CVS auschecken. Stellen Sie sich vor, ich hätte /das Startverzeichnis angegeben!

Ich denke, der Grund ist, dass ich nameanstelle von verwendet habe -name. Ich habe es einfach erneut ausgeführt als

find . -name CVS -exec rm -fr {} \;

Und es scheint gut zu funktionieren. Was genau passiert, wenn nameanstelle von verwendet wird -name?

Antwort1

Sie vermissen den Bindestrich vor -name, daher wurde gesucht nachPfadebenannt ., nameund CVS, wobei der Punkt auf den aktuellen Ordner verweist und somit alles löscht.

Das Suchdienstprogramm durchsucht den Verzeichnisbaum rekursiv für jeden aufgelisteten Pfad.

Sie können den Test ganz einfach durchführen, indem Sie echovor dem auszuführenden Befehl Folgendes eingeben:

finde . Name CVS -exec echo rm -fr {} \;

verwandte Informationen