Como encontrar todos os arquivos de byte zero no diretório

6

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?

    
por Civa 29.03.2013 / 13:41

3 respostas

15

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
    
por 29.03.2013 / 13:55
0

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.
por 15.05.2018 / 16:44
-3

você pode tentar isto:

ls -l | awk -F " " '{if ($5 == 0) print $9}'

Arquivo de byte zero da pasta de trabalho

    
por 20.11.2015 / 19:49