Existe uma maneira de usar o operador em find -exec

2

Estou tentando esvaziar muitos arquivos em uma determinada pasta.

>file ou cat /dev/null > file ou echo "" > file pode arquivar o arquivo. find . -type f -exec blahblah {} \; pode encontrar arquivos e fazer algo neles.

Eu tentei usar o operador > em find ... -exec , mas o resultado é diferente do que eu esperava.

Existe uma maneira de usar o operador > no comando find ?

    
por Sencer H. 11.02.2014 / 15:14

4 respostas

4

Você não pode usá-lo diretamente, pois ele será interpretado como um redirecionamento real. Você precisa envolver a chamada em outro shell:

find . -type f -exec sh -c 'cat /dev/null >| $0' {} \;

Se sh for Bash, você também pode fazer:

find . -type f -exec sh -c '> $0' {} \;
    
por 11.02.2014 / 15:21
2

Ou você pode redirecionar a saída do comando de localização com substituição de processo :

while IFS= read -r -d '' file
do cat /dev/null > "$file"
done < <(find . type -f print0)
    
por 13.02.2014 / 12:31
1
O

paralelo permite o escape de > as \> :

find . -type f|parallel \>{}

Ou use apenas read :

find . -type f|while read f;do >"$f";done

Você não precisa de -r , -d '' ou IFS= , a menos que os caminhos contenham barras invertidas ou novas linhas ou iniciem ou terminem com caracteres em IFS .

    
por 08.03.2014 / 14:43
1

Como alternativa, pode-se usar apenas o comando apropriadamente nomeado truncate .

Assim:

truncate -s 0 file.blob

A versão GNU coreutils de truncate também lida com muitas coisas fascinantes :

SIZE may also be prefixed by one of the following modifying characters: '+' extend by, '-' reduce by, '<' at most, '>' at least, '/' round down to multiple of, '%' round up to multiple of.

Um método ainda mais simples, embora menos apropriado, seria

cp /dev/null file.blob
    
por 22.07.2014 / 15:37

Tags