O tamanho é igual ao tamanho do arquivo ou ao tamanho das dimensões da imagem?
Em zsh, para ver todos os arquivos .png
no diretório atual e seus subdiretórios, classificados aumentando o tamanho do arquivo:
echo **/*.png(oL)
Não há qualificador de glob conveniente para pegar todos os N arquivos. Aqui está um loop que define a matriz $a
para conter todos os 50 arquivos (começando com o maior).
a=() i=0
for x in **/*.png(OL); do
((i%50)) || a+=$x
((++i))
done
my-favorite-image-viewer $a
Sem o zsh ou o GNU find, não há uma maneira fácil de classificar find
output por metadados (há find -ls
ou find -exec ls
ou find -exec stat
, mas eles podem não funcionar com arquivos que contêm caracteres não imprimíveis, então não gosto de recomendá-los). Aqui está uma maneira de fazer isso em Perl.
find . -name '*.png' |
perl -e '
$, = "\n"; # separate elements by newlines in the output
print # print…
sort {-s $a <=> -s $b} # …sorted by file size…
map {chomp;$_} <> #…the input lines (with the newline bitten off)
'
E aqui está uma maneira de visualizar todos os 50 arquivos (começando com o maior):
find . -name '*.png' |
perl -e '
$, = "\n";
exec "my-favorite-image-viewer",
map {$i++ % 50 ? () : $_} # every 50
sort {-s $b <=> -s $a} map {chomp;$_} <>
'
Outra abordagem seria criar links simbólicos em um único diretório, com nomes ordenados por tamanho de arquivo. Em zsh:
mkdir tmp && cd tmp
i=1000000 # the extra 1 on the left ensures alignment
for x in ../**/*(oL); do
((++i))
ln -s $x ${i#1}.png
done
com o Perl:
mkdir tmp && cd tmp
find .. -name '*.png' |
perl -e '
$, = "\n";
for $x (sort {-s $a <=> -s $b} map {chomp;$_} <>) {
symlink $x, sprintf("%06d", ++$i);
}
'