3 sposoby usuwania wszystkich plików w katalogu oprócz jednego lub kilku plików z rozszerzeniami

3 sposoby usuwania wszystkich plików w katalogu oprócz jednego lub kilku plików z rozszerzeniami

Czasami wchodzisz w sytuację, w której musisz usunąć wszystkie pliki w katalogu lub po prostu wyczyścić katalog, usuwając wszystkie pliki oprócz plików danego typu (kończąc na konkretnym rozszerzeniu).

W tym artykule pokażemy, jak usunąć pliki w katalogu, z wyjątkiem rozszerzeń lub typów plików za pomocą Rm, znajdować I Globignore polecenia.

Zanim przeprowadzimy się dalej, zacznijmy od krótkiego spojrzenia na jedną ważną koncepcję w systemie Linux - dopasowanie wzorców nazwy pliku, które pozwoli nam poradzić sobie z naszym problemem.

Sugerowane przeczytanie: Użyj komendy Znajdź, aby wyszukać wiele nazw plików/rozszerzeń w Linux

W Linux wzorzec powłoki to ciąg, który składa się z następujących znaków specjalnych, które są określane jako dzikie karty Lub Metacharacters:

  1. * - pasuje do zera lub więcej znaków
  2. ? - Dopasowuje dowolny pojedynczy znak
  3. [SEQ] - Dopasowuje dowolną postać w SEQ
  4. [[[!SEQ] - odpowiada dowolnej postaci nie w SEQ

Istnieją trzy możliwe metody, które tu zbadamy, a obejmują one:

Usuń pliki za pomocą rozszerzonych operatorów dopasowywania wzorców

Różne operatory dopasowywania wzorców rozszerzonych są wymienione poniżej, gdzie lista wzorów to lista zawierająca jedną lub więcej nazw plików, oddzielona za pomocą | postać:

  1. *(lista wzorów) - pasuje do zera lub więcej wystąpień określonych wzorców
  2. ?(lista wzorów) - odpowiada zerowi lub jednym wystąpieniu określonych wzorów
  3. +(lista wzorów) - pasuje do jednego lub więcej wystąpień określonych wzorów
  4. @(lista wzorów) - pasuje do jednego z określonych wzorów
  5. !(lista wzorów) - dopasowuje wszystko oprócz jednego z podanych wzorców

Używać ich, włącz extglob Opcja Shell w następujący sposób:

# shopt -s extglob 

1. Aby usunąć wszystkie pliki w katalogu, z wyjątkiem nazwy pliku, wpisz polecenie poniżej:

$ rm -v !("Nazwa pliku") 
Usuń wszystkie pliki oprócz jednego pliku w Linux

2. Aby usunąć wszystkie pliki, z wyjątkiem nazwa pliku1 I nazwa pliku2:

$ rm -v !(„nazwa pliku1” | „nazwa pliku2”) 
Usuń wszystkie pliki oprócz kilku plików w Linux

3. Poniższy przykład pokazuje, jak usunąć wszystkie pliki inne niż wszystkie .zamek błyskawiczny Pliki interaktywnie:

$ rm -i !(*.zamek błyskawiczny) 
Usuń wszystkie pliki oprócz plików ZIP w Linux

4. Następnie możesz usunąć wszystkie pliki w katalogu oprócz wszystkich .zamek błyskawiczny I .ODT pliki w następujący sposób, pokazując, co się robi:

$ rm -v !(*.Zip |*.ODT) 
Usuń wszystkie pliki oprócz niektórych rozszerzeń plików

Po uzyskaniu wszystkich wymaganych poleceń wyłącz extglob Opcja Shell, taka:

$ shopt -u extglob 

Usuń pliki za pomocą komendy znajdź polecenie

Zgodnie z tą metodą możemy użyć polecenia Znajdź wyłącznie z odpowiednimi opcjami lub w połączeniu z Xargs polecenie, stosując rurociąg jak w poniższych formularzach:

$ find / Directory / -type f -not -name 'Wzór' -Delete $ find / Directory / -type f -not -name 'wzór' -print0 | xargs -0 -i  rm  $ find / Directory / -Type f -not -name 'wzór' -print0 | xargs -0 -i  rm [opcje]  

5. Następujące polecenie usunie wszystkie pliki oprócz .GZ Pliki w bieżącym katalogu:

$ znajdź . -Typ f -not -name '*.gz'-delete 
Znajdź polecenie - usuń wszystkie pliki oprócz .pliki GZ

6. Używać rurociąg I Xargs, Możesz zmodyfikować powyższą sprawę w następujący sposób:

$ znajdź . -Typ f -not -name '*gz' -print0 | xargs -0 -i  rm -v  
Usuń pliki za pomocą poleceń FINK i XARGS

7. Spójrzmy na jeden dodatkowy przykład, poniższe polecenie wyczyści wszystkie pliki z wyłączeniem .GZ, .ODT, I .jpg Pliki w bieżącym katalogu:

$ znajdź . -typ f -not \ ( -nazwa '*gz' -or -name '*odt' -or -name '*.jpg '\) -delete 
Usuń wszystkie pliki oprócz rozszerzeń plików

Usuń pliki za pomocą zmiennej Bash Globignore

To ostatnie podejście działa jednak tylko z Bash. Tutaj Globignore Zmienne przechowuje lista wzorów rozdzielona przez okrężność (nazwy plików), które należy zignorować przez rozszerzenie nazwy ścieżki.

Sugerowane przeczytanie: Przydatne 12 praktycznych przykładów na polecenie GREP w Linux

Aby zastosować tę metodę, przejdź do katalogu, który chcesz oczyścić, a następnie ustaw Globignore zmienna w następujący sposób:

$ CD Test $ globignore =*.ODT:*.ISO:*.tekst 

W tym przypadku wszystkie pliki inne niż .ODT, .ISO, I .tekst Pliki z usunięciem z bieżącego katalogu.

Teraz uruchom polecenie, aby wyczyścić katalog:

$ rm -v * 

Potem wyłącz Globignore zmienny:

$ unset globignore 
Usuń pliki za pomocą zmiennej Bash Globignore

Notatka: Aby zrozumieć znaczenie flag zastosowanych w powyższych polecenia.

To wszystko! Jeśli masz na myśli inne techniki wiersza poleceń w tym samym celu, nie zapomnij podzielić się z nami za pośrednictwem naszej sekcji informacji zwrotnej poniżej.