Самый простой способ — использовать -S
с ls
для сортировки содержимого каталога по размеру. Файлы по-прежнему сгруппированы по каталогам, что может быть не совсем то, что вам нужно:
ls -RaltrS --block-size=M /*
Такой подход здесь может не подойти; возможно, all_files.txt
— это старый файл или он был сгенерирован на другом компьютере. По-прежнему можно сортировать имена файлов по размеру файла. Для типичного файла строка вывода, созданная ls -Raltr --block-size=M
(, обратите внимание, что --block-size
начинается с двух дефисов вместо одного ), выглядит следующим образом:
-rw-rw-r-- 1 owner group 1M Apr 16 05:37 file.txt
Используйте sort
с-h
(для -удобочитаемых чисел, таких как 1M ), и с -k 5
, чтобы указать, что размеры файлов указаны в пятом столбце (, разделенном пробелом )текста:
sort -k 5 -h /home/root/all_files.txt
Сортировка вывода ls -Raltr --block-size=M /*
, хранящегося в /home/root/all_files.txt
, может быть запутанной из-за дополнительных строк, в которых не указаны размеры файлов, поэтому сначала используйте grep
, чтобы получить только нужные строки:
grep '^-' /home/root/all_files.txt | sort -k 5 -h
Здесь grep '^-'
отбрасывает строки, которые не начинаются с дефиса (, например, строки, начинающиеся с d
для каталога или l
для ссылки ).
Этот ответ работает с инструментами GNU на Xubuntu 16.04. Он не тестировался на системах MacOS или BSD.