Я хотел бы отсортировать каталоги файлов указанным положением в имени файла с помощью "графического" filemanager.
У меня есть загрузки файлов этого типа (например).:
0001_oeirnglhk.ext
0002_gkggkcxiuv.ext
0003_xcvxemrn.ext
0004_tteytzpsiogut.ext
0005_sdfdtyeienvf.ext
...
0347_bwvoxciurnsa.ext
↑
└ sort starts here
Я хотел бы, чтобы сортировка начала со столбца 5, при этом тот был бы первый "альфа-" символ в этих строках. Моя цель состоит в том, чтобы исследовать соответствия альфа-вида (или близкие соответствия) при сохранении числового префикса, затем выбрать возможные ручные вмешательства. Я пытался делать это путем дампа имен к текстовому файлу, затем сортировки на именах файлов, но это стало очень громоздким на "интервенционном" этапе, таким образом поиски "gui" решения.
Я ввел по абсолютному адресу в этом в PCManFM, Наутилусе, Немо, Thunar, и Удваиваю Командующего без успеха. Мог бы быть плагин, расширение или другое приложение, которое сделало бы это?
В то время как мой идеал должен получить "gui" решение, если бы существуют эффективные решения в терминале, я был бы благодарен знать о тех, также. Например, если бы числовой префикс мог бы быть перемещен временно и восстановлен после того, как манипуляции файлом завершаются, который работал бы на меня также.
Обновление: В то время как аккуратный @terdon (и принятый!) решение позволило мне иметь дело эффективно с этой конкретной задачей, все еще будет хорошо знать о графическом файловом менеджере, который отсортировал бы на произвольном "столбце" имен файлов каталога.
Один способ сделать это должно было бы переименовать Ваши файлы для создания их более легко поддающимися сортировке инструментами GUI использования. Для тестирования этого я создал несколько файлов с возрастающими числовыми префиксами и случайными именами:
for i in {001..005} {150..155}; do
n=$(cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c 10);
touch $i"_"$n.ext;
done
, Который создал следующие файлы в моей системе:
$ ls
001_zxUBrPQEEt.ext 003_crMQ1lLrPA.ext 005_t3gf-X2N82.ext
151_aKDwJu7phP.ext 153_SSqGdDLOmO.ext 155_mlnSjEGdCF.ext
002_cmAdbTcm0L.ext 004_-39-uI6G9e.ext 150_Vft6mVa5LN.ext
152_5QNPNYdqDj.ext 154_A3EQG1_idu.ext
для сортировки их, как Вы хотите, должно быть достаточно переместить числовой префикс в конец имени файла. Можно сделать это использование следующего rename
команда (для тестирования смены имени, на самом деле не изменяя имен, используйте -n
вместо -v
):
$ rename -v 's/^(.+?)_(.*)/$2_$1/' *
001_zxUBrPQEEt.ext -> zxUBrPQEEt.ext_001
002_cmAdbTcm0L.ext -> cmAdbTcm0L.ext_002
003_crMQ1lLrPA.ext -> crMQ1lLrPA.ext_003
004_-39-uI6G9e.ext -> -39-uI6G9e.ext_004
005_t3gf-X2N82.ext -> t3gf-X2N82.ext_005
150_Vft6mVa5LN.ext -> Vft6mVa5LN.ext_150
151_aKDwJu7phP.ext -> aKDwJu7phP.ext_151
152_5QNPNYdqDj.ext -> 5QNPNYdqDj.ext_152
153_SSqGdDLOmO.ext -> SSqGdDLOmO.ext_153
154_A3EQG1_idu.ext -> A3EQG1_idu.ext_154
155_mlnSjEGdCF.ext -> mlnSjEGdCF.ext_155
Эти rename
команда по существу читает Perl. Здесь, мы даем ему оператор (s/original/replacement/
) замены, который это будет относиться к каждому имени файла и переименовывать его к результату упомянутого оператора. Используемый regex будет соответствовать всему с начала имени файла (^
) к первому _
((.*?)_
). Эти ?
делает соответствие нежадным, вынуждая это найти самую короткую соответствующую строку. Круглые скобки "получают" подобранные подстроки, делая их доступными в правой стороне оператора. 1-й полученный шаблон будет $1
, 2-е $2
и так далее. Результат состоит в том, что числовой префикс ($1
) перемещен в после остальной части имени ($2
).
, После того как Вы выполнили эту команду, можно открыть каталог и сделать вещь с редактором GUI. Инвертировать его и вернуться к использованию настоящих имен:
rename 's/(.*)_(\d+$)/$2_$1/' -- *
Здесь, regex соответствует всему до _
и затем одно или несколько чисел (\d+
) до конца строки ($
). --
в конце общая функция многих программ командной строки, и он показывает конец опций. Это гарантирует, что любое имя файла, запускающееся с -
, не принято за опцию.
Лучше просто использовать команду sort
из командной строки. У него есть опция -k
, которая позволяет сортировать на основе определенного поля и символа в этом поле. Поле — это набор символов между двумя разделителями полей, по умолчанию — пробел. В вашем случае в каждом имени файла есть только одно поле. Затем вам нужно указать, какой символ в первом поле вы хотите использовать для сортировки. sort
считает с 1, поэтому первая буква — это символ номер шесть.
Вам также необходимо сформировать список файлов с одним именем файла в строке. Это делается опцией -1
для ls
.
Тогда вся работа выполняется одной строкой:
ls -1| sort -k 1.6
И переименование файла не требуется.