du relata incorretamente o diretório vazio


13

Eu estou usando estes comandos:

du -sh --apparent-size ./*
du -sh ./*

ambos os relatórios:

4.0K    ./Lightroom_catalog_from_win_backup
432M    ./Lightroom catalog - wine_backup

enquanto esses diretórios contêm:

$ll ./"Lightroom catalog - wine_backup"
total 432M
-rwxrwx--- 1 gigi gigi 432M Mar 18  2018 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 1 gigi gigi  227 Nov 21  2015 zbackup.bat
$ll ./Lightroom_catalog_from_win_backup
total 396M
-rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 Lightroom 5 Catalog Linux.lrcat
-rwxrwx--- 3 gigi gigi  227 Dec 17 09:35 zbackup.bat

Por que os durelatórios estão disponíveis 4.0Kpara ./Lightroom_catalog_from_win_backup e como eu posso fazer isso corretamente?

PS: outras informações do sistema:

$stat --file-system $HOME
  File: "/home/gigi"
    ID: 5b052c62a5a527bb Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 720651086  Free: 155672577  Available: 119098665
Inodes: Total: 183050240  Free: 178896289

$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:        16.04
Codename:       xenial

Para aproveitar as respostas já dadas até agora, o que /bin/ls -li './*/Lightroom 5 Catalog Linux.lrcat'retorna?
doneal24

ls -li ./*/"Lightroom 5 Catalog Linux.lrcat" 36831321 -rwxrwx--- 1 gigi gigi 432M Mar 18 2018 ./Lightroom catalog - wine_backup/Lightroom 5 Catalog Linux.lrcat 36833201 -rwxrwx--- 3 gigi gigi 396M Dec 17 09:35 ./Lightroom_catalog_from_win_backup/Lightroom 5 Catalog Linux.lrcat
adrhc

1
Isso apresenta um problema com as respostas, pois o arquivo com a contagem de links de três não está sendo contado em nenhuma outra parte do ducomando. Então você tem apenas dois subdiretórios no seu diretório de trabalho?
precisa saber é o seguinte

não, tenho aproximadamente 15 outras pessoas
adrhc

Respostas:


23

Posso reproduzir se os arquivos são links físicos:

~ mkdir foo bar
~ dd if=/dev/urandom of=bar/file1 count=1k bs=1k
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00985276 s, 106 MB/s
~ ln bar/file1 foo/file1
~ du -sh --apparent-size foo bar
1.1M    foo
4.0K    bar

Esse é o comportamento esperado. Nos documentos do GNUdu :

Se dois ou mais links físicos apontam para o mesmo arquivo, apenas um deles é contado. A ordem dos argumentos do arquivo afeta quais links são contados e a alteração da ordem dos argumentos pode alterar os números e entradas que são gerados.

Se você realmente precisa de tamanhos repetidos de links físicos, tente a -lopção:

' -l'
' --count-links'
Conte o tamanho de todos os arquivos, mesmo que eles já tenham sido exibidos (como um link físico).

~ du -sh --apparent-size foo bar -l
1.1M    foo
1.1M    bar

15

Observe como é a contagem de links 3para os dois arquivos Lightroom 5 Catalog Linux.lrcate zbackup.batentre Lightroom_catalog_from_win_backup.

Isso significa que esses dois arquivos estão fortemente vinculados a (nomes adicionais para) outros arquivos em algum lugar. Quando você executa duem um diretório ou conjunto de arquivos, cada link físico é contado apenas uma vez.

Exemplo:

$ ls -l
total 41024
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file1
-rw-r--r--  2 kk  wheel  10485760 Dec 17 09:07 file2

$ du -h file1
10.0M   file1

$ du -h file2
10.0M   file2

$ du -h .
10.0M   .

Esse comportamento é explicitamente determinado pelo padrão POSIX para o duutilitário :

Um arquivo que ocorre várias vezes em um operando de arquivo e que possui uma contagem de links maior que 1 deve ser contado e gravado para apenas uma entrada.

Algumas duimplementações têm opções não padrão para desativar esse comportamento. Para o GNU du, isso é feito com a -lopção


3

Está quase certamente funcionando corretamente. duconta cada arquivo apenas uma vez, independentemente de quantas vezes ele é referenciado. É provável que seus dois diretórios contenham o mesmo conjunto de arquivos vinculados.

A página de manual do GNU duoferece -l, --count-linkspara desativar essa otimização padrão (veja man dupara verificar se sua implementação inclui isso). Ou você executa duduas vezes, uma vez para cada diretório.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.