这看起来很棒: 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