Localiza arquivos em vários diretórios obtidos da lista em um arquivo?

2
FreeBSD 9.2 RELEASE p2

Eu tenho um arquivo dirs.txt . Neste arquivo, há uma nova lista de diretórios separada por linha, assim:

/etc
/home
/home/goods/

Eu preciso primeiro encontrar em todos os arquivos do diretório que tem nomes como "bom" ou conter string "(NODES_'TASK ')" e, em seguida, copiar todos esses arquivos para o diretório /tmp .

Eu acho que deve ser algo como:

$ find $fromDirs.txt -type f -name 'good' | \
    grep -lr '\(NODES_\'TASK\'\)' $fromDirs.txt | > /tmp
    
por Dmitrij Holkin 12.09.2014 / 14:07

1 resposta

3

Pelo que entendi, você tem um arquivo contendo uma lista de diretórios. Você quer todos os arquivos que:

  1. estão dentro de um diretório na lista em que o conteúdo do arquivo contém (NODES_'TASK')
  2. 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)

    
por 12.09.2014 / 15:04