首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash - dirname不使用替换

Bash - dirname不使用替换
EN

Stack Overflow用户
提问于 2019-11-18 17:48:43
回答 3查看 140关注 0票数 0

当使用带有$(dirname {})find时,它总是只输出“。作为目录名。例如:

代码语言:javascript
复制
find . -name \*.h -exec echo {} \; -exec echo $(dirname {}) \;

输出:

代码语言:javascript
复制
./folder/folder.h
.
./folder/sub_folder/sub_folder.h
.
./test.h
.

但我希望是这样的:

代码语言:javascript
复制
./folder/folder.h
./folder
./folder/sub_folder/sub_folder.h
./folder/sub_folder
./test.h
.

有趣的是,为每个find创建一个新的shell会生成正确的输出:

代码语言:javascript
复制
find . -name \*.h -exec sh -c 'echo $0; echo $(dirname $0);' {} \;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-18 18:13:51

这一行给出了你想要的:

代码语言:javascript
复制
find . -name *.h -print -exec dirname {} \;
票数 0
EN

Stack Overflow用户

发布于 2019-11-18 19:36:30

通过脚本测试上述命令后,观察到$(dirname {})已展开到当前目录.‘。

代码语言:javascript
复制
mkdir -p test1/test2
touch test1/test2/tests.h
find . -name \*.h -exec echo {} \; -exec echo $(dirname {}) \;
./test1/test2/tests.h
.

echo "find . -name \*.h -exec echo {} \; -exec echo $(dirname {}) \;" > checkh.sh

bash -vx checkh.sh

find . -name \*.h -exec echo {} \; -exec echo . \;
+ find . -name '*.h' -exec echo '{}' ';' -exec echo . ';'
./test1/test2/tests.h
.
.

这就是为什么输出总是显示为.当前目录。

因此,请使用您的迷你脚本sh -c样式或Kent's solution

对您的命令稍作修改也可以,例如,将echo放在命令替换中:

代码语言:javascript
复制
find . -name \*.h -exec echo {} \; -exec $(echo dirname {}) \;
./test1/test2/tests.h
./test1/test2

修改后的测试用例如下:

代码语言:javascript
复制
echo "find . -name \*.h -exec echo {} \; -exec $(echo dirname {}) \;" > checkh2.sh 
bash -vx checkh2.sh 
find . -name \*.h -exec echo {} \; -exec dirname {} \;
+ find . -name '*.h' -exec echo '{}' ';' -exec dirname '{}' ';'
./test1/test2/tests.h
./test1/test2
票数 1
EN

Stack Overflow用户

发布于 2019-11-18 19:42:55

您可能真的想要使用以下代码:

代码语言:javascript
复制
find . -name '*.h' -type f -printf "%p\n%h\n"

当您查看printf format部分下的man find时,您会注意到有很多有用的标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58911805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档