Найти и удалить все файлы без расширений в папке и ее подпапках

16

У меня есть папка без 500 подкаталогов. В нем много мусора, и я хочу его почистить.

Я уже удалил определенные типы файлов, которые мне не нужны, например изображения, с помощью этой команды:

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

Однако теперь я хочу удалить все файлы без расширений. Файлы типа «Список покупок» и «Список покупок.txt»

Я пробовал следующую команду, но она не работала:

find . -mindepth 1 ! -iname "*.*" -type f -delete
etsnyman
источник

Ответы:

20

Попробуй это:

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

Однако обратите внимание, что приведенное выше не удалит файлы, чье имя оканчивается ., например, на foo.. Чтобы удалить их, используйте вместо этого:

find . -type f  ! -name "*.?*" -delete
terdon
источник
Вторая команда была моим следующим вопросом. Спасибо! Я мог также напечатать, find . -type f ! -name "*?.*" -deleteчтобы удалить файлы как ".trash" или что-то, что мне было не нужно. Не волнуйтесь - это не был мой домашний каталог, поэтому я не потерял ни одного файла конфигурации.
etsnyman
5
@etsnyman Лучше сначала протестировать команду без -deleteопции!
Раду Рэдяну
@etsnyman не совсем, чтобы удалить файлы, которые начинаются с точки, используйте find . -type f -name ".*" -deleteтот, что в вашем последнем комментарии, также удалит файлы без расширений. И что сказал Раду! Проверьте сначала!
Тердон
@ RaduRădeanu Я сначала проверил это на фиктивной директории с пустыми файлами ...
etsnyman
@terdon Что означает знак вопроса в вашей второй команде?
Авинаш Радж
2

Вы можете использовать:

find . -type f ! -name "*.*" -delete
Раду Рэдяну
источник