知道文件夹可能包含手动创建的不删除的文件,从文件夹中删除自动生成的文件的最佳方法是什么?

知道文件夹可能包含手动创建的不删除的文件,从文件夹中删除自动生成的文件的最佳方法是什么?

这看起来很棒: find . ! -name *custom.conf -delete

但如果我没有任何 custom.conf ,它就不起作用:(

我在想:

  • 分成2个文件夹
  • 在 find 命令中使用正则表达式

免责声明:这是我的第一个问题,我认为添加评论可能会更好https://unix.stackexchange.com/a/247973/247207但我没有发表评论所需的声誉

答案1

这里的问题是,在调用该实用程序之前,命令行上的文件名通配模式将由 shell 扩展(如果它与当前目录中的任何名称匹配)。

这意味着实际执行的命令可能类似于

find . ! -name thing1-custom.conf thing2-custom.conf thing3-custom.conf -delete

set -x如果在调用该命令之前在命令行上启用跟踪,则可以看到这一点。用于set +x稍后关闭跟踪。

您的命令还应该给您一条错误消息unknown option,或者paths must precede expression取决于您对该find实用程序的实现。

这里正确的做法是从 shell 中引用模式,正如 Michael Homer 在评论中指出的那样(他说要转义*,但恕我直言,引用整个模式看起来更好并且具有相同的效果):

find . ! -name '*custom.conf' -delete

这样,模式将按原样移交find,并且实用程序将针对当前目录中的所有名称进行自己的匹配。

我还要补充-type f一点,以便我们确定我们只会对常规文件进行操作:

find . -type f ! -name '*custom.conf' -delete

相关内容