我从查找中得到了这些结果:
$ find subprojects -mindepth 1 -maxdepth 1
subprojects/install-globally-first
subprojects/installation-test-project-custom-config
subprojects/install-via-github
subprojects/init-from-nothing
subprojects/node-path-test
subprojects/install-globally-with-nvm
subprojects/installation-test-project
subprojects/parallel-installs-of-suman
我想将这些结果映射到:
subprojects/install-globally-first/test.sh
subprojects/installation-test-project-custom-config/test.sh
subprojects/install-via-github/test.sh
subprojects/init-from-nothing/test.sh
subprojects/node-path-test/test.sh
subprojects/install-globally-with-nvm/test.sh
subprojects/installation-test-project/test.sh
subprojects/parallel-installs-of-suman/test.sh
(在这种情况下我所做的就是将“/test.sh”附加到结果中......我确信一个好的解决方案是这样的:
$ find subprojects -mindepth 1 -maxdepth 1 | something (?)
但我不知道那会是什么!这里相当新手。可能不止一种方法可以做到这一点,我想寻找最简单、最强大的解决方案。
请注意,由于这些路径中已经存在 test.sh 文件,我可以这样做:
find subprojects -mindepth 2 -maxdepth 2 -name "test.sh"
但我想我正在寻找方法来做到这一点,假设这些 test.sh 文件在文件系统上尚不存在。
答案1
您可以sed
通过附加所需的后缀来“编辑”每一行:
find subprojects -mindepth 1 -maxdepth 1 | sed 's!$!/test.sh!'
的正常分隔符sed
是,/
但我已经使用了,!
因为替换已经包含/
,并且我不想\/
在结果中以视觉结构结束(sed 's/$/\/test.sh/'
)。
如果您正在寻找可能存在的文件,或者尚未存在但将会存在的文件,您可能应该限制您find
只选择目录,使用find subprojects -mindepth 1 -maxdepth 1 -type d
在评论中,您还会询问如何将其放入一行中。如果您的参数都不包含空格(subprojects/some where/test.sh
例如),您可以将结果通过管道传输到xargs
.
答案2
最后添加一些东西,一个简单的 echo 也可以工作:
find subprojects -mindepth 1 -maxdepth 1 -exec echo {}/test.sh \;
#OR to have them in variables
IFS=$'\n';ff=($(find subprojects -mindepth 1 -maxdepth 1 -exec echo {}/test.sh \;));echo ${ff[@]}
答案3
如果您更喜欢使用 GNU Parallel:
find subprojects -mindepth 1 -maxdepth 1 | parallel echo {}/test.sh
这也将使执行它们变得容易:
find subprojects -mindepth 1 -maxdepth 1 | parallel {}/test.sh