Ich bin nicht allzu vertraut find
und habe es versehentlich geschafft, eine Menge Dateien zu löschen. Ich habe mich gefragt, ob jemand mit mehr Erfahrung erklären kann, wo ich falsch gelaufen bin.
Ich wollte alle die aufzuräumen .DS_Store
und ._.DS_Store
Dateien , dass mein MacBook Finder wurde barfing alle über meine Raspbian Samba - Freigabe.
- Ich habe eine Festplatte an meinen Himbeer-Pi angeschlossen, mit einigen Symlinks in meinem Home-Ordner zum Montagepunkt, daher die
-L
. - Einige der Ordner gehören Systembenutzern (z. B. Apache), daher die
sudo
.
Ich habe Folgendes ausgeführt, um sicherzustellen, dass find
die richtigen Dateien ausgewählt wurden:
hydraxan@raspberry:~ $ sudo find -L . -maxdepth 255 -name \*DS_Store\*
./.DS_Store
./Downloads/USBHDD1/._.DS_Store
./Downloads/USBHDD1/.DS_Store
./Downloads/USBHDD1/backups/ALAC/._.DS_Store
./Downloads/USBHDD1/backups/ALAC/Jeff Van Dyck - Assault Android Cactus OST/._.DS_Store
./Downloads/USBHDD1/backups/ALAC/Jeff Van Dyck - Assault Android Cactus OST/.DS_Store
./Downloads/USBHDD1/backups/ALAC/.DS_Store
./Downloads/USBHDD1/backups/._.DS_Store
./Downloads/USBHDD1/backups/.DS_Store
./Downloads/USBHDD1/backups/OriginalMusic/._.DS_Store
./Downloads/USBHDD1/backups/OriginalMusic/.DS_Store
./Downloads/USBHDD1/backups/OriginalMusic/FLAC/.DS_Store
./Downloads/USBHDD1/backups/Storage/._.DS_Store
./Downloads/USBHDD1/backups/Storage/.DS_Store
./Downloads/OriginalMusic/._.DS_Store
./Downloads/OriginalMusic/.DS_Store
./Downloads/OriginalMusic/FLAC/.DS_Store
./Downloads/ALAC/._.DS_Store
./Downloads/ALAC/Jeff Van Dyck - Assault Android Cactus OST/._.DS_Store
./Downloads/ALAC/Jeff Van Dyck - Assault Android Cactus OST/.DS_Store
./Downloads/ALAC/.DS_Store
Alles sieht gut aus!
Ich habe dann das -delete
Flag hinzugefügt find
, um die gefundenen Dateien zu entfernen:
hydraxan@raspberry:~ $ sudo find -L . -maxdepth 255 -delete -name \*DS_Store\*
find: cannot delete `./Documents': Not a directory
find: cannot delete `./Pictures': Not a directory
find: cannot delete `./Music': Not a directory
Als ich merkte, dass aus irgendeinem Grund versucht wurde, meine Symlinks zu löschen, gab ich Ctrl+C
ungefähr die Hälfte der Daten ein und speicherte sie.
Dokumente, Bilder und Musik sind Toast. Es hat wahrscheinlich an meinem riesigen Downloads-Ordner funktioniert, in den ich fast alles gelegt habe.
Warum wurden find
alle diese Dateien gelöscht? Habe ich -delete
an der falschen Stelle platziert?
xargs
,exec
lösen Sie das Problem überhaupt nicht (dieselbe Gefahr, wenn Sie -print0 oder -exec am Anfang anstelle des Endes hinzufügen).man
Seite falsch gelesen . Ich dachte, es heißt, dass-delete
es nach dem Pfad ("Startpunkt") sein muss, nicht nach dem Muster.find things which are less than 256 directory levels down and delete them and whose name contains DS_Store
ls -1 -l
mitls -l -1
.Das Grundprinzip der Befehlszeile von
find
lautet „Wenn Bedingung und Bedingung und… dann Aktion“. Beachten Sie, dass die Aktion als letzte ausgeführt wird - sie unterscheidet sich erheblich vom Format des Aufrufs eines Befehls, der "Aktionsobjektobjekt ..." lautet.Bedeutet zum Beispiel
find . -name \*DS_Store\* -delete
"Wenn der Name übereinstimmt,*DS_Store*
dann löschen". Wenn Sie die Bedingung und die Aktion umkehren, hat die-delete
Aktion keine Bedingung, sodass sie bedingungslos angewendet wird.Der Grund, warum
find . -delete -name \*DS_Store\*
es sich nicht um einen Syntaxfehler handelt, besteht darin, dass Aktionen auch Bedingungen sind. Die-delete
Aktion ist eine echte Bedingung, wenn sie erfolgreich ist, und falsch, wenn sie fehlschlägt (z. B. aufgrund fehlender Berechtigungen). Druckt beispielsweisefind . -name somethingorother -delete -print
die Namen der Dateien, die erfolgreich gelöscht wurden.Der Grund, warum
find -name \*DS_Store\*
es sich nicht um einen Syntaxfehler handelt, liegt darin, dass eine implizite-print
Aktion vorliegt, wenn keine Aktion vorhanden ist . Es wurde auf diese Weise entworfen, da das Drucken eine sehr häufige Wahl ist.(Beachten Sie, dass meine Antwort zwar keine direkte Lüge enthält, aber einige Dinge vereinfacht. Es gibt Merkmale
find
, die in den Erklärungen in meiner Antwort nicht behandelt werden, insbesondere die!
und-o
logischen Operatoren.)quelle