Ich möchte alle Dateien eines Verzeichnisses "bereinigen", einschließlich aller Dateien in Unterverzeichnissen, aber ich möchte die Unterverzeichnisse an Ort und Stelle belassen. Ich verstehe, rm -r
dass dadurch auch die Unterverzeichnisse selbst gelöscht werden.
Ich möchte keine versteckten (Punkt-) Dateien löschen.
Wie kann das gemacht werden?
command-line
find
rm
Scott Wilton
quelle
quelle
find -type f ! -name "[.]*" -delete
ist nicht geeignet?-delete
- es werden nur Dateinamen gedruckt, um sie zu löschen.Antworten:
Verwenden Sie
find
dafür:quelle
-delete
I do not want to delete hidden (dot) files.
+
(zumindest nicht in den Familien Bourne, csh oder rc). Es gibt eine Legende, die besagt, dass einige alte Versionen dercsh
erforderlichen Flucht,{}
aber ich bin nie auf diese gestoßen.find . ! -name '.*' ! -type d ! -path '*/.*'
sollten Sie den Job erledigen.find . -name '.?*' -prune -o ! -type d -exec rm {} +
vermeiden, in diesen insgesamt abzusteigen. Beachten Sie, dass--
dies hier nicht erforderlich ist (schadet jedoch nicht), da Pfade mit beginnen./
.versuchen Sie etwas wie:
quelle
.... -exec rm {} +
?-exec rm {} +
ist nicht parallel, es ruft nurrm
mit mehreren Dateinamen auf. Es werden wenigerrm
Aufrufe ausgeführt und sind daher ressourcenschonender. Wenn es etwas weniger sicher ist, vergrößert es das Race-Fenster, in dem eine Verzeichniskomponente der zu entfernenden Dateien in einen Symlink geändert werden kann. Aber nur-delete
oder-execdir rm {} \;
würde das voll ansprechen.-exec
Standard ist.-delete
und-execdir
von BSDs kommen, fügte GNU sie etwa 10 Jahre später hinzu. Auf jeden Fall hat das nichts mit Linux zu tun, das nur ein Kernel ist.