Para encontrar o tamanho de algum grupo de arquivos

Para encontrar o tamanho de algum grupo de arquivos

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 findpara ls, mas lsnã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, dupega 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-fromdiz du(somente GNU du) para obter a lista de arquivos da entrada padrão (representada por -aqui). -cfornece 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-sizeopção du(novamente, específico do GNU). Adicione a -lopçã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 findcomando.)

informação relacionada