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)