Encontre o uso total do disco não incluindo arquivos contendo uma string

3

Estou tentando obter o uso do disco do diretório owncloud , exceto não incluindo os arquivos e diretórios que contêm a cadeia nobackup no nome / dir.

Este é o meu comando até agora:

find . -type f -not -regex '.+?nobackup.*'  -exec du -c {} +  

Mas isso me dá um total falso quando usado no diretório de nuvem, em um dir de teste ele funciona muito bem.

    
por k.mooijman 24.10.2014 / 15:46

1 resposta

2

Se você usar find ... -exec COMMAND {} + ou find ... -print0 | xargs -0 COMMAND , xargs ou find será criar uma lista de argumentos de nome de arquivo que não ultrapasse o espaço de buffer definido por cada comando (limitado por ARG_MAX ). Se o espaço do buffer estiver esgotado, cada comando passará a lista de argumentos de nome de arquivo para COMMAND e começará a criar uma nova lista. Esse processo será repetido quantas vezes forem necessárias, até que não haja mais nomes de arquivos. Nesse ponto, a lista de nomes de arquivos que está sendo criada será passada para COMMAND a última vez.

Portanto, se você não está esperando que o comando find retorne um grande número de nomes de arquivos

find . -type f -not -regex '.+?nobackup.*' -exec du -c {} +  

pode ser suficiente. Se você é e seu du suporta --files0-from , você pode usar, --files0-from=- para ler files com terminação nula diretamente de stdin ( du considere - para significar vindo de stdin )

find . -type f -not -regex '.+?nobackup.*' -print0 | du -c --files0-from=-

Observação: --files0-from não é especificado por posix , mas deve ser estendido nas versões mais recentes de gnu du . Se sua implementação omitiu, você provavelmente terá que repetir os resultados de find de alguma forma e somar os totais no loop.

    
por 26.10.2014 / 14:28