Welcher `find`-Befehl löscht alles in einem Verzeichnis außer CVS-Ordnern?

356
kev

Ich habe ein Verzeichnis:

$ tree . |-- CVS | |-- Entries | |-- Entries.Log | |-- Repository | `-- Root |-- dirA | |-- CVS | | |-- Entries | | |-- Repository | | `-- Root | |-- file1 | `-- file2 |-- dirB | |-- CVS | | |-- Entries | | |-- Repository | | `-- Root | |-- file3 | `-- file4 |-- file5 `-- file6 

Ich kann alle Dateien, die ich löschen möchte, mit diesem Befehl finden:

$ find . -name CVS -prune -o -type f -print 

Aber wenn ich ändern -printzu-delete

$ find . -name CVS -prune -o -type f -delete 

Alles ist weg. Warum?

1

1 Antwort auf die Frage

3
Daniel Andersson

Schauen Sie sich die Manpages an findunter -delete:

Wenn Sie eine Suchbefehlszeile testen, die Sie später mit -delete verwenden möchten, sollten Sie explizit -depth angeben, um spätere Überraschungen zu vermeiden. Da -delete -depth impliziert, können Sie -prune und -delete nicht sinnvoll zusammen verwenden.

Sie können die meisten wahrscheinlich verwenden nur -exec rm {} +statt -deletein diesem Zusammenhang zu tun, was Sie wollen, aber wie immer, wenn sie mit dem Feuer spielen: machen sehr sicher, dass es, bevor er in der hart arbeitet.