mapeie os resultados do find

0

Eu tenho estes resultados encontrados:

$ 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

Eu quero mapear estes resultados para:

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

(Tudo o que estou fazendo neste caso é acrescentar "/test.sh" aos resultados ... Tenho certeza que uma boa solução é algo como:

$ find subprojects -mindepth 1 -maxdepth 1 | something (?)

mas não sei o que seria! Muito newby aqui. Provavelmente mais de uma maneira de fazer isso, procurando a solução mais robusta e mais simples, eu acho.

Observe que, como os arquivos test.sh já existem nesses caminhos, eu poderia fazer isso:

find subprojects -mindepth 2 -maxdepth 2 -name "test.sh"

Mas eu acho que estou procurando fazer isso, supondo que esses arquivos test.sh ainda não existam no sistema de arquivos.

    
por Alexander Mills 23.12.2016 / 10:28

3 respostas

1

Você pode usar sed para "editar" cada linha adicionando o sufixo necessário:

find subprojects -mindepth 1 -maxdepth 1 | sed 's!$!/test.sh!'

O separador normal para sed é / , mas usei ! porque a substituição já contém / e não queria terminar com \/ construções visuais no resultado ( sed 's/$/\/test.sh/' ).

Se você estiver procurando por arquivos que possam existir, ou ainda não, mas provavelmente, você deve restringir seu find a escolher apenas diretórios, com find subprojects -mindepth 1 -maxdepth 1 -type d

Nos comentários, você também pergunta como colocar isso em uma única linha. Desde que nenhum dos seus argumentos contenha espaço em branco ( subprojects/some where/test.sh , por exemplo), você pode canalizar o resultado em xargs .

    
por 23.12.2016 / 10:54
1

Para adicionar algo no final, um simples eco também pode funcionar:

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[@]}
    
por 23.12.2016 / 13:53
1

Se você preferir usar o GNU Parallel:

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

Isso também facilita a sua execução:

find subprojects -mindepth 1 -maxdepth 1 | parallel {}/test.sh
    
por 04.03.2017 / 12:21

Tags