如何查找不以波形符(“~”)开头的文件夹

如何查找不以波形符(“~”)开头的文件夹

我正在尝试查找文件夹,但不包括以波浪号(“~”)开头的文件夹。我尝试了以下方法,但结果为零。看起来是find将波浪号解释为通配符。

find . -type d -not -path '*/\~*'
find . -type d -not -path '*/~*'
find . -type d -not -regex '.*/~.*'
find . -type d -not -regex '.*/\~.*'

我的 find 版本是find (GNU findutils) 4.6.0.

答案1

要跳过./path/to/~dir文件夹,但不跳过./path/to/~dir/subdir,正如其他人已经说过的那样,您可以执行以下操作:

find . ! -name '~*' -type d -print

如果你也不想下降进入这些文件夹(并在那里找到更多文件夹),你会这样做:

find . -name '~*' -prune -o -type d -print

这告诉find我们修剪以名称开头的目录为根的分支~

这在功能上应该基本上等同于您的:

find . -type d ! -path '*/~*'

只是后者不进行修剪,因此即使它不打印任何目录,仍然会查看这些目录,因此效率较低。


¹ 存在一些差异,即第一个*可能*/~*无法匹配包含无效字符的文件名

答案2

您需要使用该-name选项来指定您的表达式正在测试的对象。以下对我有用:

find . -type d ! -name '~*'

答案3

名称测试应该没问题:

find . -type d ! -name '~*'

相关内容