検索結果のマッピング

検索結果のマッピング

検索により、次のような結果が得られました。

$ 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


コメントでこれを1行に入れる方法も尋ねました。引数にスペースが含まれていない場合(subprojects/some where/test.shたとえば)、結果をxargs

答え2

最後に、何かを追加すると、単純なエコーも機能します。

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パラレルを使用したい場合:

find subprojects -mindepth 1 -maxdepth 1 | parallel echo {}/test.sh

これにより実行も簡単になります。

find subprojects -mindepth 1 -maxdepth 1 | parallel {}/test.sh

関連情報