我正在尝试查找文件夹,但不包括以波浪号(“~”)开头的文件夹。我尝试了以下方法,但结果为零。看起来是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 '~*'