find: argumento ausente para -exec com +?

0

Então, digamos que em um script bash eu tenha o seguinte:

# Count the number of wood.dat files
numWoodFiles=($( find ./$1_* -type d -exec find {} -type f -name "wood\.dat" \+  | wc -l  ))

Quando o executo, recebo o seguinte erro:

find: missing argument to '-exec'

Eu quero usar o operador + para que o comando seja executado mais rapidamente e simultaneamente em vez do ; , que será executado sequencialmente.

    
por leeand00 22.04.2018 / 10:52

1 resposta

1

Ao usar find ... -exec ... {} + , o {} deve ser a última coisa antes do + (porque find adiciona os nomes de caminho ao final do comando). O erro vem de perder o ; no final do primeiro find .

Não há nenhum benefício em primeiro localizar todos os subdiretórios e, em seguida, executar outra pesquisa sobre eles, portanto, o comando find pode ser substituído por um único find :

find "./$1_"* -type f -name 'wood.dat'

Isso procuraria por arquivos chamados wood.dat em todos os diretórios correspondentes a "./$1_"* .

Toda a tarefa seria

numWoodFiles=$( find "./$1_"* -type f -name 'wood.dat' | wc -l )

Eu removi o% outer (...) , pois não precisamos criar um array para um único inteiro.

    
por 22.04.2018 / 11:01

Tags