use find
(assumindo o GNU find
) para gerar nomes de arquivo com o tamanho do arquivo. ordenar. imprima o maior deles.
find . -type f -printf "%s\t%p\n" | sort -n | tail -1
Isso pressupõe que os caminhos de arquivo não contêm caracteres de nova linha.
Usando um loop em bash
com a implementação GNU de stat
:
shopt -s globstar
max_s=0
for f in **; do
if [[ -f "$f" && ! -L "$f" ]]; then
size=$( stat -c %s -- "$f" )
if (( size > max_s )); then
max_s=$size
max_f=$f
fi
fi
done
echo "$max_s $max_f"
Isso será significativamente mais lento que a solução de localização. Isso também pressupõe que os nomes de arquivos não terminem em caracteres de nova linha e irão ignorar arquivos ocultos e não descer para diretórios ocultos.
Se houver um arquivo chamado -
no diretório atual, o tamanho do arquivo aberto no stdin será considerado.
Tenha em atenção que as versões de bash
anteriores a 4.3 seguiram ligações simbólicas ao descer a árvore de directórios.