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.