Não use a substituição de comando na saída de find
. Já que você já está usando opções específicas do GNU:
find . -size +1c -type f -exec grep -LZwE 'keyword1|keyword2|keyword3' {} + |
xargs -r0 truncate -s 0
Este comando não funciona:
$ truncate -s 0 $(find . -size +1c type -f -exec grep -LwE 'keyword1|keyword2|keyword3' {} +)
"find: paths must precede expression: type
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
truncate: missing file operand
Try 'truncate --help' for more information."
Nota: Eu entendo que o espaço em branco pode causar problemas.
$ rm $(find . -size +1b -type f -exec grep -LwE 'keyword1|keyword2|keyword3' {} +)
funciona corretamente, mas não é o que eu preciso também.
Não use a substituição de comando na saída de find
. Já que você já está usando opções específicas do GNU:
find . -size +1c -type f -exec grep -LZwE 'keyword1|keyword2|keyword3' {} + |
xargs -r0 truncate -s 0
Esse erro foi causado apenas pelo traço estar no lugar errado ("type -f" vs "-type f"). Use:
truncate -s 0 $(find . -size +1c -type f -exec grep -LwE 'keyword1|keyword2|keyword3' {} +)
Para lidar com nomes de arquivos com espaços:
find . -size +1c -type f -exec grep -LwE 'keyword1|keyword2|keyword3' {} + | while IFS= read -r fname ; do truncate -s 0 "$fname" ; done