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?

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.


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.


2

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

shopt -s extglob
mv !(*.py) some_dir

2
ls | grep -v ".py$" | xargs rm

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.