Você não está dando nenhum argumento (nome de arquivo) para stat
que levou a esse erro.
Você está usando a variável file
para armazenar cada nome de arquivo e fazer um loop sobre eles, mas você não está dando os nomes de arquivos como argumentos para stat
. Em suma, você precisa passar $file
(o valor da variável file
) para stat
.
Você também pode fazer tudo o que estiver fazendo em uma linha:
for file in .* *; do stat -c '%s-%n' "$file" ; done
Se você insistir na saída formatada com printf
, precisará de um \n
extra:
for file in .* *; do stat --printf='%s-%n\n' "$file" ; done
Aqui eu também adicionei %n
para que você possa saber qual o tamanho do arquivo que está sendo mostrado.
EDITAR:
Se você deseja executar isso apenas em arquivos, excluindo diretórios, é necessário usar uma verificação adicional. Aqui eu usei test
( [
) embutido para verificar se file
é um arquivo regular, se assim for [ -f "$file" ]
retorna o código de saída 0 então ( &&
) executa stat
no arquivo:
for file in .* *; do [ -f "$file" ] && stat -c '%s-%n' "$file" ; done