Como posso limpar o conteúdo de todos os arquivos em um subdiretório sem alterar a propriedade / permissões?

2

Eu posso encontrar a lista de arquivos usando algo como:

find /path/to/files -type f

E posso limpar o conteúdo de um único arquivo com qualquer um:

> filename

echo -n > filename

cat /dev/null > filename

Você pode fazer algo assim com comandos que não envolvem redirecionamento de saída:

find /path/to/files -type f -exec file '{}' \;

No entanto, isso não funciona:

find /path/to/files -type f -exec echo -n > '{}' \;

Não consigo construir um comando usando -exec ou | xargs do find para canalizar a lista de arquivos para um desses comandos que limparão os arquivos. Como posso fazer isso?

    
por Dave Forgac 04.05.2012 / 21:51

2 respostas

3

find /path/to/files -type f -exec /bin/sh -c "> '{}'" ';' deve fazer o que quiser; veja encontre (1) para detalhes sobre como o exec funciona em detalhes, mas esta invocação executa o comando uma vez, colocando o filename onde {} é.

Você também pode dizer ao xargs para passar apenas um único nome de arquivo para o comando, ou usar find /path -type f | while read file; do echo -n > "$file"; done para fazer isso no nível do shell.

    
por 04.05.2012 / 21:56
4

Apenas por diversão, eis outra opção:

find /path/to/files -type f -exec dd if=/dev/null of={} \;
    
por 04.05.2012 / 23:35