Имеется сложная древовидная структура директорий с кучей файлов. Требуется вывести список файлов (без директорий, но это легко фильтруется по grep '/$' или find -type f) с полными путями, отсортированный по расширению. Очевидное решение
ls -X `find dirname -type f`
$ find dirname | wc
68974 70533 4281002
Можно получить список расширений при помощи
find dirname -type f | \
grep -o '.*\.[^/]*' | \
sed 's/^.*\.\([^\./]*\)$/\1/' | \
sed 'y/QWERTYUIOPASDFGHJKLZXCVBNM/qwertyuiopasdfghjklzxcvbnm/' | \
sort | \
uniq
Как ещё можно отсортировать? Или можно увеличить обрабатываемый ls объём?
Зачем это требуется? Хочу сравнить сжатие бэкапов новым 7z и новым RAR, а RAR сортирует по расширению. Подогнать список к порядку rarfiles.lst один раз можно и вручную, но сортировать вручную тысячи директорий неохота.
Заранее спасибо.
Ответ: Самое короткое решение:
find dirname -type f | rev | sort | rev
Более длинные варианты выводят расширение в 1-ю колонку средствами perl или zsh. Или sed. Или awk.
Но попытка испытать 7z-15.09 провалилась. Он непонятным образом тасует список пользователя, и получился архив на треть длиннее, чем без сортированного списка.