我想找到没有后缀的文件并删除它们。该怎么做?

我想找到没有后缀的文件并删除它们。该怎么做?

我想查找并删除文件夹及其子文件夹中具有特定属性的所有文件:它们没有三个字母的后缀。您如何做到这一点?谢谢。

答案1

TL;DR;(自动删除内容时这确实是一个非常糟糕的想法)

find . ! -name "*.???" -type f -max-depth 1 -delete


正确解释并测试:

步骤0:设置测试环境:

mkdir test
cd test
touch test1
touch test1.bar
touch test1.foo
touch test1.baz
touch test1.bazar

步骤 1:查找所有具有三个字母扩展名的文件:

find . -name "*.???" -type f -print
./test1.bar
./test1.baz
./test1.foo

第 2 步:反转选择

find . ! -name "*.???" -type f -print
./test1
./test1.bazar

步骤 3:将 替换-print-delete

如果你不想深入子目录,请添加-max-depth=1

答案2

假设您有 bash 版本 4+(您可以使用以下方式检查bash --version

shopt -s extglob  ##  turn on extended globbing
rm -- !(*.???)

对于递归性:

shopt -s extglob globstar
rm -- **/!(*.???)

一般来说,我建议在你的 .bashrc 中放入此行,因为扩展通配符和 globstar 非常有用:

shopt -s extglob globstar

答案3

您可以尝试一下find

首先使用这个向他们展示以确保您获得正确的文件:

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

当您确定要删除它们时,可以使用:

find . -type f ! -name "*.???" -print0 | xargs -0 rm -rfv

或者如果你喜欢这种-exec方式:

find . -type f ! -name "*.???" -exec rm -rfv {} +

注意:只在特定版本及更高版本中有效(请查看第二段下的{} +手册。否则您可以使用,但这会带来很多开销,需要为每个文件执行。man find-exec-exec -rfv {} \;rm

在正确的文件夹中使用此内容。否则,请.用文件夹名称替换。

相关内容