Se você quiser apenas listar os arquivos de 0 byte, use find
:
Exemplo usando find
:
$ find . -type f -size 0b
./4.txt
./5.txt
./6.txt
A vantagem de usar find
é que você pode canalizá-lo facilmente para xargs
para fazer o que quiser com os arquivos (como excluí-los), o que é muito mais fácil do que usar um for
loop. p>
Se você estiver procurando fazer algo com esses arquivos depois de encontrá-los, por exemplo, excluindo todos os arquivos de 0 byte (enquanto contabiliza nomes de arquivos estranhos), eu faria algo assim:
$ find -type f -size 0b -print0 | xargs -0I file rm -v file
removed ‘./4.txt’
removed ‘./5.txt’
removed ‘./6.txt’
Além disso, outra opção para simplesmente listar todos os arquivos no diretório junto com o tamanho do arquivo em formato legível, use du -h
.
Exemplo usando du
:
$ du -h *
1.0K 1.txt
1.0K 2.txt
1.0K 3.txt
0 4.txt
0 5.txt
0 6.txt
EDITAR: Desde que você saiba como encontrar os arquivos vazios, você pode realizar operações adicionais de diversas maneiras. O seguinte exemplo pode não ser a melhor maneira de fazê-lo, mas se você está absolutamente procurando por uma declaração if/else
, então você poderia fazer algo assim:
#!/bin/bash
for i in *; do
if [[ $(du -h "$i" | awk '{print $1}') = 0 ]]; then
echo "$i is empty."
else
echo "$i is not empty."
fi
done
Retorna:
1.txt is not empty.
2.txt is not empty.
3.txt is not empty.
4.txt is empty.
5.txt is empty.
6.txt is empty.