Znajdź i usuń wszystkie pliki bez rozszerzeń w folderze i jego podfolderach

16

Mam folder bez około 500 podkatalogów. Jest w nim dużo śmieci i chcę je posprzątać.

Za pomocą tego polecenia usunąłem już niektóre typy plików, których nie chcę, np. Obrazy:

find . -mindepth 1 -iname "*.jpg" -type f -delete

Jednak teraz chcę usunąć wszystkie pliki bez rozszerzeń. Pliki takie jak „Lista zakupów” zamiast „Lista zakupów.txt”

Próbowałem następującego polecenia, ale nie zadziałało:

find . -mindepth 1 ! -iname "*.*" -type f -delete
etsnyman
źródło

Odpowiedzi:

20

Spróbuj tego:

find . -type f  ! -name "*.*"  -delete

Należy jednak pamiętać, że powyższe nie spowoduje usunięcia plików, których nazwa kończy się .na przykład na a foo.. Aby je również usunąć, użyj tego zamiast:

find . -type f  ! -name "*.?*" -delete
terdon
źródło
Drugie polecenie było moim następnym pytaniem. Dzięki wielkie! Mógłbym także wpisać, find . -type f ! -name "*?.*" -deleteaby usunąć pliki takie jak „.trash” lub cokolwiek innego, czego nie potrzebowałem. Nie martw się - to nie był mój katalog domowy, więc nie straciłem żadnych plików konfiguracyjnych.
etsnyman
5
@etsnyman Lepiej najpierw przetestować polecenie bez -deleteopcji!
Radu Rădeanu
@Etsnyman nie całkiem, aby usunąć pliki zaczynające się od kropki, użyj find . -type f -name ".*" -deletetego w swoim ostatnim komentarzu spowoduje również usunięcie plików bez rozszerzeń. I co powiedział Radu! Najpierw przetestuj!
terdon
@ RaduRădeanu Właściwie przetestowałem go najpierw w katalogu
fikcyjnym
@terdon Co oznacza znak zapytania w drugim poleceniu?
Avinash Raj
2

Możesz użyć:

find . -type f ! -name "*.*" -delete
Radu Rădeanu
źródło