public_html
我有以下命令来从我通过登录远程终端后在整个目录结构中查找名为“Zero1”或“zero1”(不区分大小写)的任何文件夹/文件ssh
。
find . -iname "Zero1" -exec readlink -f {} + | tee Zero1.txt
但是如果有多个文件夹符合条件(应该有,这就是我使用它的原因),那么它就会中断extra operand .... Try readlink --help for more information
。
而且它没有找到结构中符合条件(名称应包含 Zero1)的名为“Zero1_Module.xml”的文件。
这是为什么?我该如何克服这个问题并仍然使用相同的命令?
答案1
首先,选择我的名字意味着不同的东西:根据手册,
-iname 模式
类似于 -name,但匹配不区分大小写
但是,那图案您提供的内容完全匹配. 如果你想找到每个以 开头的文件的匹配项零1(案件在敏感),你应该使用:
find . -iname 'zero1*'
(无需使用大写字母,因为匹配不区分大小写):星号确保任何以 开头的文件都会匹配零1(不区分大小写)。
第二,执行子句应写如下:
find . -iname 'zero1*' -exec sh -c 'readlink -f $0 | tee Zero1.txt' {} \;
或者
find . -iname 'zero1' -exec sh -c 'readlink -f $0 | tee -a Zero1.txt' {} \;
exec 子句应该(几乎)总是以以下语句结束\;以及调用sh-c'...'是为了防止外壳破坏管道;最后,对应{} -> $0需要将参数传递给命令,其中包含“……”,因为 shell 不会解释 apices 中的命令,因此它无法用真实文件名替换{}。因此我们需要将文件名传递给“……”通过外部方式命令。
请让我知道有关阅读链接这次尝试后仍然存在。