
Eu estava tentando descobrir o tamanho total de todos os arquivos pertencentes a um usuário específico.
Ao tentar isso, obtenho tamanhos diferentes ao executar comandos diferentes.
Qual comando é correto para descobrir o tamanho total de todos os arquivos pertencentes a um usuário específico?
$ find . -type f -user silviya|ls -lh|head -1
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .
Qual é a razão desta variação?
Responder1
Em:
find . -type f -user silviya|ls -lh|head -1
você está canalizando a saída find
para ls
, mas ls
não lê sua entrada. É necessária a lista de arquivos para listar como argumentos. Na ausência de argumentos como aqui, lista os arquivos não ocultos no diretório atual. Então aqui você obtém o uso do disco de todos os arquivos não ocultos (de qualquer tipo) no diretório atual (com o tamanho de um determinado arquivo contado para cada um de seus links físicos).
Em:
find . -type f -user agalya|wc -c
Você está contando o número de bytes na saída de find
, então esse é o tamanho dos caminhos de arquivo (e delimitadores de nova linha), não o uso do disco nem o tamanho do arquivo.
Em:
find . -type f -user agalya|du -sk
Assim como ls
, du
pega a lista de arquivos como argumentos, não como entrada. Então aqui você obtém o uso do disco de todos os arquivos e diretórios no diretório atual (recursivamente).
Para obter o uso do disco de todos os arquivos regulares de propriedade do agalya
, com utilitários GNU, você faria:
find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1
--files0-from
diz du
(somente GNU du
) para obter a lista de arquivos da entrada padrão (representada por -
aqui). -c
fornece o tamanho cumulativo (observe que os links físicos de um mesmo arquivo são contados apenas uma vez).
Para obter o arquivoaparentetamanho em oposição ao uso do disco, adicione a --apparent-size
opção du
(novamente, específico do GNU). Adicione a -l
opção (também específica do GNU) para contar links físicos várias vezes.
Responder2
O comando nº 1 fornece o tamanho total dos bytes "úteis" dos arquivos, de seu conteúdo.
O comando nº 3 fornece espaço em disco usado para armazenar os arquivos. Os discos são divididos em blocos (geralmente de 4 KB) que não podem ser compartilhados por vários arquivos. Portanto, um arquivo de qualquer tamanho entre 1 e 4096 B usará 4 kB de espaço em disco, por exemplo [Isso é simplificado. Em alguns tipos de FS como ext, arquivos muito pequenos podem ser armazenados na própria tabela de arquivos, sem usar nenhum bloco de dados.]
O comando nº 2 apenas conta o número de caracteres donomes de arquivos. (Tamanho da saída do find
comando.)