Você tem dois bugs:
-
Você está comparando com um tamanho que contém
46
; você quer que seja igual a 46. -
Você está imprimindo a linha inteira, quando deseja apenas o nome do arquivo.
E um problema adicional: qual é o sentido de -ltr
classificar a saída ls
quando você não está usando a ordem de classificação?
Você quer fazer algo como
ls -l | awk '$5 == "46" {print $9}' | xargs rm
Exceto que você não quer fazer isso, porque embora possa estar seguro no momento, a análise da saída ls
não é confiável. Use uma ferramenta apropriada, como
find . -maxdepth 1 -size 46c -delete # requires GNU find
(Fazer isso portably é mais chato, já que POSIX find
não tem -maxdepth
ou -size
que opera em unidades diferentes de blocos. Melhor escrever um script em Perl / Python / Ruby / etc. que pode usar uma varredura de diretório apropriada que não terá problemas com caracteres especiais em nomes de arquivos.