Я хочу перечислить кучу файлов, которые отсортированы по их именам, за исключением расширения файла. У меня есть эти файлы в каталоге

$ls 
mobility_arXiv.tex
mobility_SR.bbl
paper-hj-mm.tex
paper-hj-mm-vp-rkp.tex
paper-hj.tex

Я хочу, чтобы результат был

mobility_arXiv.tex
mobility_SR.bbl
paper-hj.tex
paper-hj-mm.tex
paper-hj-mm-vp-rkp.tex

Есть ли способ добиться этого.

2 ответа2

2

Вы можете направить вывод ls в cut , который срезает поля, указав "." в качестве разделителя. В результате могут быть отсортированы по конвейеру в sort

ls | cut -f 1 -d '.' | sort

Если вам нужно обрабатывать точки "." в имени файла вы можете использовать

ls | rev | cut -d . -f 2- | rev | sort

Это работает, сначала переворачивая каждый листинг, возвращаемый ls, затем обрезая первое (первоначально последнее) поле, а затем снова переворачивая.

ПРИМЕЧАНИЕ. Не может использоваться с выводом цвета.

Если вы все равно хотите сохранить расширение и просто отсортировать по первой части имени файла, которую вы можете использовать

ls | sort -k 1,1 -t . 

Здесь вы говорите сортировать, чтобы использовать "." в качестве разделителя и сортировки по ключу (полю) 1.

2

Команда ls сортирует файлы по имени в алфавитном порядке по возрастанию по умолчанию. Расширение является частью имени файла, поэтому лучшее, что вы можете сделать, если вам не нужно расширение в выводе:

ls | cut -f 1 -d '.' | sort

ОБНОВИТЬ

Лучшее решение:

ls | sort -k 1,1 -t .

Здесь для сортировки сказано использовать только поле номер 1 и точку в качестве разделителя полей. Поэтому он игнорирует расширение, но не вырезает его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .