find é uma maneira fácil de fazer isso::
find . -size 0
ou se você precisar de uma listagem longa, anexe a opção -ls
find . -size 0 -ls
Como encontrar todos os arquivos de zero bytes no diretório e até mesmo em subdiretórios?
Eu fiz isso:
#!/bin/bash
lns='vdir -R *.* $dir| awk '{print $8"\t"$5}''
temp=""
for file in $lns ; do
if test $file = "0" ;then
printf $temp"\t"$file"\n"
fi
temp=$file
done
... mas eu tenho apenas arquivos nesse diretório, não todos os arquivos, e se algum nome de arquivo tivesse espaço, eu obtinha apenas a primeira palavra seguida por uma tabulação.
Alguém pode me ajudar?
find incluirá todos os arquivos e diretórios sob os caminhos dados como parâmetros, filtrando-os com base nas regras fornecidas como parâmetros adicionais. Você pode usar
find "$dir" -type f -name 'glob*' -size 0 -print
Algumas find implementations não requerem um diretório como o primeiro parâmetro (algumas como o do Solaris) e serão padronizadas para o diretório de trabalho atual ( . ). Na maioria das implementações, o parâmetro -print pode ser omitido, se não for especificado, find é padronizado para imprimir arquivos correspondentes.
"$dir" é substituído pelo shell pelo valor da variável dir (a partir da pergunta) -type f limita a arquivos (sem diretórios ou links simbólicos) -name 'glob*' limita-o ao arquivo que possui o nome correspondente glob* (nomes de arquivos que começam com glob ). Para incluir todos os arquivos, omita este -size 0 inclui apenas arquivos com tamanho 0 (o mesmo em todas as unidades, para valores diferentes de zero, c precisa ser incluído para verificar o tamanho do arquivo em bytes) -print é a ação a ser executada com arquivos correspondentes. -print imprimirá os nomes dos arquivos. Pode ser omitido em implementações find compatíveis com o padrão. Se não estiver presente -print está implícito. você pode tentar isto:
ls -l | awk -F " " '{if ($5 == 0) print $9}'
Arquivo de byte zero da pasta de trabalho
Tags linux shell-script