Quando você executa todo esse nbq ... find ... | sort ... , pipeline, o shell divide os comandos da seguinte forma:
nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' |
sort -nr |
head -n 50 |
tee log
Portanto, a única coisa que nbq vê é o bit antes do primeiro canal. Você precisa parar o shell de fazer isso e, em vez disso, dar a linha inteira para nbq . Sem qualquer documentação sobre como nbq analisa e executa o comando, é difícil saber a abordagem correta.
-
Você poderia dizer a
nbqpara executar um shellsh, com seu one-liner original como um único argumento:nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ sh -c "find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' | sort -nr | head -n 50 | tee log" -
Como alternativa,
nbqpode ser inteligente o suficiente para gerenciar o pipeline em si (ou, mais provavelmente, iniciar outro shell para fazer o trabalho), caso em que você só precisa escapar de cada|para protegê-lo do ( atual).nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' \| sort -nr \| head -n 50 \| tee log -
Se tudo mais falhar, você pode abandonar a abordagem "one-liner" e colocar todo o pipeline em um script:
#!/bin/sh find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' | sort -nr | head -n 50 | tee logdiga
nbqpara executar esse script:nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ /path/to/top50.sh