Usuń wszystkie pliki oprócz jednego z rm

10

Czy jest jakiś sposób, aby usunąć wszystkie pliki z katalogu oprócz jednego z określoną nazwą pliku? Na przykład, jeśli miałem katalog zawierający pliki file1, file2oraz dontdelete. Czy istnieje sposób na szybkie usunięcie file1, file2a nie dontdelete? Wiem, że mógłbym to zrobić, rm file1 file2ale nie zadziałałoby to dla wielu plików. Ponadto korzystam z systemu Mac OS X, jeśli to robi różnicę.

Wuffers
źródło
Rozwiązaniem mogą być proste symbole wieloznaczne: plik rm * usunie plik 1 i plik 2, ale nie usunie go. Jeśli twoje potrzeby są bardziej złożone, w zależności od języka skryptowego powłoki, możesz wygenerować listę plików, które chcesz usunąć, używając wyrażenia regularnego i przesłać je do polecenia rm.
therobyouknow
@Rob: Tak, moja sytuacja jest bardziej skomplikowana. I odpowiedź Ignacio zadziałała. W każdym razie dzięki!
Wuffers

Odpowiedzi:

16

W bash:

shopt -s extglob
rm !(dontdelete)
Ignacio Vazquez-Abrams
źródło
1
+1 Wow, bardzo zwięzłe rozwiązanie. Będę o tym pamiętać, jeśli będę tego potrzebować.
therobyouknow
to może być rozszerzony o wiele katalogów, które nie Wan usunąć
mcgrailm