Localize e exclua todos os arquivos sem extensões em uma pasta e suas subpastas

16

Eu tenho uma pasta sem cerca de 500 subdiretórios. Há muito lixo nele e eu quero limpá-lo.

Eu já apaguei certos tipos de arquivos que não quero, como imagens, com este comando:

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

No entanto, agora eu quero excluir todos os arquivos sem extensão. Arquivos como "Lista de compras" em vez de "Lista de compras.txt"

Eu tentei o seguinte comando, mas não funcionou:

find . -mindepth 1 ! -iname "*.*" -type f -delete
etsnyman
fonte

Respostas:

20

Tente o seguinte:

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

No entanto, observe que o acima não excluirá arquivos cujo nome termina em ., por exemplo foo.. Para excluí-los também, use isso:

find . -type f  ! -name "*.?*" -delete
Terdon
fonte
O segundo comando foi minha próxima pergunta. Muito obrigado! Eu também poderia digitar find . -type f ! -name "*?.*" -deletepara remover arquivos como ".trash" ou o que não fosse necessário. Não se preocupe - não era meu diretório pessoal, então não perdi nenhum arquivo de configuração.
Etsnyman # 15/14
5
@etsnyman Melhor testar primeiro o comando sem a -deleteopção!
Radu Rădeanu 15/05
@etsnyman não é bem assim: para remover arquivos que começam com um ponto, use find . -type f -name ".*" -deleteo do seu último comentário e também excluirá os arquivos sem extensões. E o que Radu disse! Teste primeiro!
Terdon # 15/14
@ RaduRădeanu eu realmente testado pela primeira vez em um diretório fictício com arquivos vazios ...
etsnyman
@terdon O que o ponto de interrogação significa no seu segundo comando?
Avinash Raj
2

Você poderia usar:

find . -type f ! -name "*.*" -delete
Radu Rădeanu
fonte