运行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时如何排除带有特殊字符的文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
Linux下如何一条命令删除上万个文件。 我记得格式是find rm