and show no contents when cat-ing the file.
Nenhuma saída de cat
para um arquivo não implica que o arquivo esteja vazio, como mostra a seguinte experiência:
$ truncate -s 1M foo
$ ll foo
-rw-r----- 1 user users 1048576 Nov 15 19:28 foo
$ file foo
foo: data
$ cat foo
$
cat
produz 1MiB de caracteres NUL, mas esses caracteres são invisíveis em um terminal.
Sua pergunta sobre arquivos vazios é um tanto ambígua. O foo
acima se qualifica? Se "vazio" significa comprimento zero, então find
pode ajudar você:
find dir -type f -empty
lista todos os arquivos com comprimento zero em dir
. Se o seu find
não suportar -empty
, você poderá usar -size 0
.
Em scripts de shell, você pode usar a expressão -s file
, que é verdadeira se file
existir e não estiver vazia. A fim verificar se um arquivo está vazio (dado que existe) use algo como
if [ \! -s file ] ; then ... ; fi
Como alternativa, você pode usar stat(1)
. Aqui com a variante GNU:
$ stat --format=%s foo
1048576
que você pode usar mais em comparações.