Eu pensei que isso seria fácil e há muitos tópicos um tanto próximos na internet, mas nada certo.
Eu quero usar fd
(simples comando find) para exibir apenas o nome do arquivo e o tamanho do arquivo (de preferência em mb, ou formatado de forma mais legível que bytes), dos resultados da pesquisa.
O mais próximo que cheguei foi usando:
fd '2023' -x stat --format='%n : $s'
Isso parece funcionar bem para arquivos, mas não funciona para diretórios.
Por exemplo
fd --type d '2023' -x stat
Eu tentei tocar flauta | e tee
e xargs
. Mas sendo um novato, não tive sorte.
Alguma ideia de como posso exibir a saída de arquivos e pastas e como posso formatar os bytes nas unidades apropriadas?
Obrigado
Em vez do tamanho dos arquivos do diretório¹, parece que você deseja o tamanho cumulativo ou talvez o uso do disco desses diretórios e todos os arquivos que podem ser encontrados por meio de sua travessia.
Então você provavelmente quer:
(aqui usando o
fdfind
nome desse comando encontrado no Debian e derivados, pois há umfd
comando pré-existente que é para algo completamente não relacionado; substitua porfd
se for assim que é chamado em seu sistema).Isso é para
d
isku
sábio; adicione uma--apparent-size
opção paradu
o tamanho.Tenha em mente que
du
faz alguma desduplicação e conta o uso do disco de um arquivo apenas uma vez se for encontrado (por meio de qualquer um de seus hardlinks ou pelos mesmos caminhos) em mais de um diretório. Por exemplo, se houver um2023/2023
diretório, você verá0
o uso do disco do subdiretório, porque ele e todos os arquivos dentro dele já foram contabilizados no relatório do2023
diretório superior.Você pode desabilitar essa desduplicação com
--count-links
.Você também pode querer passar uma
--prune
opção parafdfind
parar de procurar mais arquivos nos diretórios correspondentes.Observe o
--
que você precisa para separar as opções dos arquivos (sem isso, você teria problemas para um arquivo chamado-2023
ou,--files0-from=2023/etc/shadow
por exemplo, (levando a uma possível vulnerabilidade de divulgação de informações). O mesmo se aplica àstat
maioria dos comandos.E observe que,
-X
em vez de-x
for,du
deve ser passado o maior número possível de caminhos de arquivo, em vez de ser executado uma vez em um novo processo para cada arquivo. Observe que porquedu
pode acabar sendo chamado mais de uma vez se houver uma grande lista de arquivos correspondentes, o que pode tornar a desduplicação mencionada acima não confiável. Uma maneira melhor de passar a lista de arquivosdu
seria por meio de seu stdin usando a--files0-from
opção. Então você pode até adicionar a-c
opção de obter uma linha totalc
no final:-h
(--human-readable
),--count-links
,--files0-from
e--apparent-size
são todas extensões não padrão da implementação GNU dedu
.-h
é comumente encontrado em outras implementações atualmente, as outras (incluindo a--human-readable
forma longa de-h
) mais raramente.¹ pense em um diretório como um diretório telefônico, por exemplo. Em muitos sistemas de arquivos, é um pouco como um arquivo CSV que contém uma lista de nomes de arquivos em uma coluna e onde encontrá-los (o número do inode) no disco em outra (e às vezes uma terceira coluna para indicar o tipo do arquivo) . E, como qualquer arquivo, esse diretório/arquivo csv tem um tamanho e um uso de disco próprios e esse é o único
gstat -c %s
ougfind -printf %s
ols -l
relatório.