Como incluir arquivos ocultos no comando stat?

1

No meu código, estou basicamente fazendo o loop recursivamente em todos os arquivos e obtendo os tamanhos usando stat -c%s $i . Funciona bem com 99% dos arquivos, no entanto, às vezes recebo um erro:

stat: cannot stat '/media/root/persistence/.Trash-0/info/subory': No such file or directory

Quando eu navego para o diretório /media/root/persistence/ e digito ls , a pasta ./Trash-0 não é mostrada, então suponho que a própria pasta e seu conteúdo estejam ocultos. Como posso me livrar dessa mensagem de erro e obter o tamanho dos arquivos dentro dela?

    
por asso 24.03.2017 / 17:59

1 resposta

1

stat não tem problema em operar em arquivos ocultos. É a convenção usual em sistemas Unix-like para programas ignorar arquivos e diretórios começando com . por padrão, mas isso não impede que esses programas vejam ou atuem em tais arquivos se eles forem explicitamente especificados.

O erro significa exatamente o que diz; stat tentou operar em um arquivo ou diretório que não existe. Isso é mais provável porque seu código gerou uma listagem de arquivos primeiro e, em seguida, durante a iteração na lista, .../info/subory foi excluído ou renomeado ou movido antes que seu código pudesse chegar a ele.

Dado o nome do diretório pai, é provavelmente algo tão simples quanto esvaziar a lixeira da sua área de trabalho enquanto o código estava sendo executado, manualmente ou por meio de algum processo automatizado.

Para problemas transitórios como esse, a solução mais simples é simplesmente ignorar o erro e talvez pular para a próxima iteração do loop:

stat -c%s $i 2>/dev/null || continue

Ou atribua um valor padrão (usando -1 para sinalizar que algo deu errado, pois 0 seria um tamanho válido):

size=$(stat -c%s $i || echo -1)

Você também pode verificar a existência do arquivo ou diretório antes de executar stat :

test -e $i && stat -c%s $i

Ou use alguma combinação dessas técnicas.

    
por 24.03.2017 / 18:45

Tags