2016-08-07 7 views
1

Hier ist, was ich bisher habe, funktioniert es aber ein Fehler wirft, und ich bin nicht ganz sicher, warum:finden und alle Verzeichnisse löschen, die Typen bestimmte Datei nicht enthalten

$ find . -mindepth 1 -type d '!' -exec sh -c 'ls -1 "{}" | egrep -i -q "\.(mp4|avi|mkv)"' \; -print -exec rm -r {} \; 
./test 
find: `./test': No such file or directory 
+3

Ich empfehle Ihnen, sehr vorsichtig zu sein, wenn Sie mit der automatischen Dateilöschfunktion arbeiten. Versuchen Sie zunächst, nur den Dateinamen zu drucken, und fügen Sie nach dem vollständigen Testen den Befehl rm hinzu. – technico

+1

erwarten Sie, dass die vollständige Pipeline "-exec" für den Wert von '{}'? Ich denke nicht, dass das richtig ist. Ich würde all diesen Code in ein Shell-Skript schreiben und 'find ... | verwenden xargs ./myShellskript.sh '. Und testen, testen, testen bevor Sie laufen! Lassen Sie es einfach die 'rm'-Befehle wiedergeben, und sobald sie richtig aussehen, leiten Sie diese zu \ '| Bash'. Viel Glück. – shellter

Antwort

0

diesen Befehl Versuchen find . -mindepth 1 -type f | egrep -v "\.(mp4|avi|mkv)$" | xargs rm -i

0

Dies ist, was ich am Ende mit:

find . -mindepth 1 -type d '!' -exec sh -c 'ls -1 "{}" | egrep -i -q "\.(mp4|avi|mkv)"' \; -print | while read line;do rm -r $line;done 

ich ein Motto, das nicht einen Fehler aus, wenn keine Verzeichnisse Anpassung der Regex haben wollte exis ted.

Verwandte Themen