Файлы вида на энном символе имени в filemanager?

Я хотел бы отсортировать каталоги файлов указанным положением в имени файла с помощью "графического" 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 (и принятый!) решение позволило мне иметь дело эффективно с этой конкретной задачей, все еще будет хорошо знать о графическом файловом менеджере, который отсортировал бы на произвольном "столбце" имен файлов каталога.

3
задан 22 December 2016 в 13:19

2 ответа

Один способ сделать это должно было бы переименовать Ваши файлы для создания их более легко поддающимися сортировке инструментами 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+) до конца строки ($). -- в конце общая функция многих программ командной строки, и он показывает конец опций. Это гарантирует, что любое имя файла, запускающееся с -, не принято за опцию.

2
ответ дан 1 December 2019 в 16:56

Лучше просто использовать команду sort из командной строки. У него есть опция -k, которая позволяет сортировать на основе определенного поля и символа в этом поле. Поле — это набор символов между двумя разделителями полей, по умолчанию — пробел. В вашем случае в каждом имени файла есть только одно поле. Затем вам нужно указать, какой символ в первом поле вы хотите использовать для сортировки. sort считает с 1, поэтому первая буква — это символ номер шесть.
Вам также необходимо сформировать список файлов с одним именем файла в строке. Это делается опцией -1 для ls.

Тогда вся работа выполняется одной строкой:

ls -1| sort -k 1.6

И переименование файла не требуется.

0
ответ дан 9 November 2020 в 18:01

Другие вопросы по тегам:

Похожие вопросы: