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