Usuń pliki, które nie kończą się na „.py” przy użyciu rm [duplikat]

0

Możliwa duplikat:
Usuń wszystkie pliki oprócz jednego z rm

To bardzo proste pytanie i nie wiem, czy istnieje rozwiązanie, czy nie.

Mam kilka plików w katalogu, zakładam, że mam .py i inne pliki rozszerzeń. teraz chciałbym usunąć wszystkie pliki oprócz tych, które kończą się .pyplikami. Jak mogę to zrobić za pomocą rmpolecenia?

To znaczy, chcę coś takiego

!(rm *.py) 

Czy to możliwe?

Społeczność
źródło

Odpowiedzi:

8
shopt -s extglob
rm !(*.py)

Włączasz zmienną extglob. Daje to dodatkowe funkcje dopasowania wzorca, szczególnie negację.

Możesz wyłączyć to ponownie za pomocą shopt -u extglob.

Rafe Kettler
źródło
5

Łatwe do zapamiętania jest znalezienie:

find -not -name "*.py" -delete 

Usunie również pliki z podkatalogów, w porównaniu z rozwiązaniem larsmas, ale można temu zapobiec za pomocą parametru -maxdepth.

Nie każda findimplementacja może obsługiwać tę deleteopcję. Gnu find działa od wersji 4.2.3.

nieznany użytkownik
źródło
2

Zakładając, że używasz Bash:

shopt -s extglob
mv !(*.py) some_dir
Fred Foo
źródło
2
ls | grep -v ".py$" | xargs rm
x13n
źródło
Używanie lsdo celów innych niż czytelne dla człowieka jest ogólnie złym pomysłem. A analiza jest jeszcze gorsza. Użyj findzamiast tego.
Livius