Rekursywne usuwanie plików przy użyciu wildcardów

Data publikacji: 2013-12-25 | Tagi:

Wydawałoby się, że nie ma nic prostszego:

rm -rf *.pyc

powinno usunąć wszystkie pliki *.pyc w bieżącym katalogu i wszystkich podkatalogach.

Niestety nie jest tak różowo i polecenie usunie zadane pliki - owszem - ale tylko w obrębie bieżącego katalogu.

Dlaczego tak się dzieje? Otóż polecenia w linuxie zwykle same nie interpretują znaków wildcard, ponieważ tym zajmuje się shell. Shell przekazuje listę plików pasującą do danego wzorca (owszem *.pyc, ale tylko w danym katalogu), a rm -rf usuwa je.

Jak zatem wykonać te polecenie dobrze?

Przy użyciu find:

find ./ -name "*.pyc" -exec rm {} \;

Szukamy plików spełniających kryteria, a następnie wykonujemy dla nich polecenie kasowania.

Teoretycznie można by było zrobić to tak:

find ./ -name "*.pyc" -delete

ale wychodzę z założenia, że find służy do szukania plików, a nie ich kasowania. Kasowaniem niech zajmuje się rm.


Oceń ten post:
Podziel się:

comments powered by Disqus

IT w obrazkach: