运行linux find时如何排除带有特殊字符的文件夹?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行linux find时如何排除带有特殊字符的文件夹?相关的知识,希望对你有一定的参考价值。

我正在使用find列出以下子文件夹:

$ find /home/user/data -maxdepth 1 -type d
/home/user/data/a
/home/user/data/b
/home/user/data/$tag[1]

现在我想排除:/home/user/data/$tag[1]我已经尝试过:

$ find /home/user/data -maxdepth 1 -type d \( ! -name '$tag[1]' \)
/home/user/data/a
/home/user/data/b
/home/user/data/$tag[1]

然后我尝试-通过反复试验:

$ find /home/user/data -maxdepth 1 -type d \( ! -name "\$tag[1\]" \)
/home/user/data/a
/home/user/data/b

这很棒,但是为什么我需要转义$和最后一个方括号]

[我也试图省去\$转义符,但这会导致错误:

$ find /home/user/data -maxdepth 1 -type d \( ! -name "$tag[1\]" \)
bad substitution: no closing `' in "$tag[1\]"
答案

如文档所述,-name值被解释为“外壳模式”。外壳模式可以包含放在方括号中的字符类。因此,您只需要转义任何方括号即可取消将其解释为字符类。

您可以通过创建与$tag1匹配的$tag[1]进行验证。

没有必要逃脱美元符号。

find /home/user/data -maxdepth 1 -type d -not -name '$tag[1\]'

以上是关于运行linux find时如何排除带有特殊字符的文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

CMD的find命令怎么用?

堆栈跟踪作为字符串

Linux下如何一条命令删除上万个文件。 我记得格式是find rm

Linux系统之find

linux find命令查找当前目录下7天前的文件但排除所有目录

Linux之find xargs