繁体   English   中英

如何使用变量指定要在“查找”中排除的路径?

[英]How do I use a variable to specify a path to exclude in `find`?

我正在尝试使用变量在find命令中指定排除路径。

此代码段有效:

x="*test/.util/*"
y="*test/sh/*"

find test -type f -name "*.sh" -not -path "$x" -not -path "$y"

但是我想将-not -path移到变量中,如下所示:

x="-not -path *test/.util/*"
y="-not -path *test/sh/*"

# error: find: -not -path *test/.util/*: unknown primary or operator
find test -type f -name "*.sh" "$x" "$y"

# Tried removing quotes
# error: find: test/.util/foo.sh: unknown primary or operator
find test -type f -name "*.sh" $x $y 

我还尝试将引号添加到变量中的路径,但这导致没有路径过滤。

# no syntax error but does not exclude the paths
x="-not -path '*test/.util/*'"
y="-not -path '*test/sh/*'"

我正在使用OSX Mavericks; GNU bash版本3.2.51(1)-发行版(x86_64-apple-darwin13)。

我究竟做错了什么? 谢谢

find接收-not -path *test/.util/*作为单个参数,而不是它需要的3个单独参数。 您可以改用数组。

x=(-not -path "*test/.util/*")
y=(-not -path "*test/sh/*")

find test -type f -name "*.sh" "${x[@]}" "${y[@]}"

引用时, ${x[@]}扩展为一系列单独的单词,每个数组元素一个,并且每个单词都保持正确的引用,因此按预期方式按原样传递模式以find

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM