it-swarm-pt.tech

Linux excluir arquivo com tamanho 0

Como faço para excluir um determinado arquivo no linux se seu tamanho é 0. Eu quero executar isso em um crontab sem qualquer script extra.

l filename.file | grep 5th-tab | not eq 0 | rm

Algo assim?

143
Franz Kafka

Isso excluirá todos os arquivos em um diretório (e abaixo) com tamanho zero.

find /tmp -size  0 -print0 |xargs -0 rm --

Se você quer apenas um arquivo em particular;

if [ ! -s /tmp/foo ] ; then
  rm /tmp/foo
fi
191
Paul Tomblin

você gostaria de usar find :

 find . -size 0 -delete
240
James.Xu

Para pesquisar e excluir arquivos vazios no diretório e subdiretórios atuais:

find . -type f -empty -delete

-type f é necessário porque também os diretórios são marcados como sendo de tamanho zero.


O ponto . (diretório atual) é o diretório de pesquisa inicial. Se você tiver GNU find (por exemplo, não Mac OS), poderá omiti-lo neste caso:

find -type f -empty -delete

De GNU find documentation :

Se nenhum arquivo para pesquisa for especificado, o diretório atual (.) Será usado.

108
Antonio

Você pode usar o comando find para fazer isso. Podemos combinar arquivos com -type f e corresponder arquivos vazios usando -size 0. Em seguida, podemos excluir as correspondências com -delete.

find . -type f -size 0 -delete
14
PYK

Isso funciona para o BSD simples, por isso deve ser universalmente compatível com todos os sabores. Below.e.g em pwd (.)

find . -size 0 |  xargs rm
4
user1874594

No Linux, o comando stat (1) é útil quando você não precisa encontrar (1):

(( $(stat -c %s "$filename") )) || rm "$filename"

O comando stat aqui nos permite apenas obter o tamanho do arquivo, que é o -c %s (veja as man pages para outros formatos). Estou executando o programa stat e capturando sua saída, essa é a $( ). Essa saída é vista numericamente, esse é o (( )) externo. Se zero é dado para o tamanho, isto é FALSE, então a segunda parte do OR é executada. Não-zero (arquivo não vazio) será TRUE, então o rm não será executado.

3
cdarke

Para uma exclusão não recursiva (usando du e awk):

rm `du * | awk '$1 == "0" {print $2}'`
2
Harrison
find . -type f -empty -exec rm -f {} \;
1
Diệu Thu Lê