Verifique se há arquivos vazios em uma pasta

4

Eu tenho um script que baixa 17 arquivos de um servidor FTP todas as vezes, mas às vezes alguns arquivos pesam "0" por alguns motivos.

Então, estou procurando um script bash que verifique se há algum arquivo cujo tamanho seja zero.

Como eu poderia fazer isso?

EDIT: Eu gostaria de usar uma declaração if-else: se houvesse arquivos de 0 byte, eu teria que executar um script bash novamente.

    
por Giacomo 17.10.2015 / 23:04

1 resposta

7

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.
    
por 17.10.2015 / 23:14

Tags