查找并删除文件夹及其子文件夹中所有没有扩展名的文件。

我有一个包含大约500个子目录的文件夹。里面有很多垃圾,我想清理一下。
我已经使用以下命令删除了一些我不想要的文件类型,比如图片:
find . -mindepth 1 -iname "*.jpg" -type f -delete

然而,我现在想要删除所有没有扩展名的文件。比如说"购物清单"而不是"购物清单.txt"
我尝试了以下命令,但是没有起作用:
find . -mindepth 1 ! -iname "*.*" -type f -delete
2个回答

试试这个:

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

然而,请注意,上述操作不会删除文件名以结尾的文件,例如foo.。如果要同时删除这些文件,请使用以下方法:
find . -type f  ! -name "*.?*" -delete

第二个命令是我接下来的问题。非常感谢!我也可以输入find . -type f ! -name "*?.*" -delete来删除像".trash"这样的文件,或者其他我不需要的文件。别担心 - 这不是我的主目录,所以我没有丢失任何配置文件。 - etsnyman
5@etsnyman 最好先测试一下不带“-delete”选项的命令! - Radu Rădeanu
@etsnyman 不完全正确,要删除以点开头的文件,请使用 find . -type f -name ".*" -delete。你在上一条评论中提到的方法也会删除没有扩展名的文件。而且,像Radu说的那样!先进行测试! - terdon
@RaduRădeanu 实际上,我先在一个空目录里测试了一下... - etsnyman
@terdon 在你的第二个命令中,问号代表什么意思? - Avinash Raj
@AvinashRaj 这个意思是"任何单个字符"。 - terdon
1这完美地回答了这个问题。但是我的建议是先运行这个命令,不要使用-delete标志,因为你永远不知道隐藏文件(比如.git)中有哪些没有扩展名的文件。所以最好先运行不带该标志的命令,它会列出所有要删除的文件。然后确认一次后,再添加-delete标志并重新运行命令。 - risingStark

你可以使用:
find . -type f ! -name "*.*" -delete