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.