映射 find 的结果

映射 find 的结果

我从查找中得到了这些结果:

$ 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

相关内容