Entfernen Sie alle Dateien rekursiv, ohne Verzeichnisse zu löschen


9

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 -rdass dadurch auch die Unterverzeichnisse selbst gelöscht werden.

Ich möchte keine versteckten (Punkt-) Dateien löschen.

Wie kann das gemacht werden?


1
find -type f ! -name "[.]*" -deleteist nicht geeignet?
— Costas

Ich weiß es nicht. Tut das was ich verlange?
— Scott Wilton

Versuchen Sie es ohne -delete- es werden nur Dateinamen gedruckt, um sie zu löschen.
— Costas

Möchten Sie Dateien (versteckt oder nicht) in versteckten Verzeichnissen löschen?
— Stéphane Chazelas

Was ist mit Symlinks zu Verzeichnissen?
— Stéphane Chazelas

Antworten:


10

Verwenden Sie finddafür:

find . ! -name '.*' ! -type d -exec rm -- {} +

1
Nicht alle Find-Implementierungen haben-delete
— wurtel

2
@ RomeoNinov bitte lesen OP Frage:I do not want to delete hidden (dot) files.
— jimmij

1
@Costas, nein, es gibt keine Shell, die entkommen muss +(zumindest nicht in den Familien Bourne, csh oder rc). Es gibt eine Legende, die besagt, dass einige alte Versionen der csherforderlichen Flucht, {}aber ich bin nie auf diese gestoßen.
— Stéphane Chazelas

1
@ScottWilton Versteckte Verzeichnisse sind enthalten, versteckte Dateien in versteckten Verzeichnissen jedoch nicht. Wenn Sie alle Dateien in versteckten Verzeichnissen ablehnen möchten, find . ! -name '.*' ! -type d ! -path '*/.*'sollten Sie den Job erledigen.
— Jimmyij

1
@ Jimmy, eher 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 ./.
— Stéphane Chazelas

0

versuchen Sie etwas wie:

find <path> ! -name '.*' -type f -exec rm {} \;

Gibt es einen Grund, die Dateien einzeln zu entfernen, anstatt die Arbeit zu beschleunigen .... -exec rm {} + ?
— Anthon

Ich mache die Dinge lieber einzeln. Massenoperationen (und parallele Operationen) haben einige seltsame (und unangenehme) Nebenwirkungen (da sie das E / A-Subsystem stark belasten)
— Romeo Ninov

1
-exec rm {} +ist nicht parallel, es ruft nur rmmit mehreren Dateinamen auf. Es werden weniger rmAufrufe 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 -deleteoder -execdir rm {} \;würde das voll ansprechen.
— Stéphane Chazelas

@ StéphaneChazelas, keines davon (-delete oder -execdir) existiert unter UNIX. Und ich sehe nicht in Frage, Linux erwähnt zu werden!
— Romeo Ninov

@ RomeoNinov, ja, ich sagte in einem anderen Kommentar hier, dass nur -execStandard ist. -deleteund -execdirvon 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.
— Stéphane Chazelas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.