Pelo que entendi, você tem um arquivo contendo uma lista de diretórios. Você quer todos os arquivos que:
- estão dentro de um diretório na lista em que o conteúdo do arquivo contém
(NODES_'TASK')
- estão dentro de um diretório na lista em que o nome do arquivo contém
good
.
e copie esses arquivos correspondentes para /tmp
.
IFS=$'\n' read -d '' -r -a dirs < fromDirs.txt
find "${dirs[@]}" -type f \( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} \; \) -exec cp {} /tmp/ \;
Isso lê fromDirs.txt
delimitado por nova linha na matriz $dirs
.
O find
examina esses diretórios, se algum dos diretórios contiver good
ou se o arquivo contiver (NODES_'TASK')
, copie esse arquivo para /tmp
.
(nota: estou usando alguns recursos específicos do bash aqui para dividir a lista de arquivos por novas linhas)