Я пытаюсь отсортировать и переименовать большое количество файлов, которые маркированы #####_##
Левая сторона подчеркивания является числами (например, 32956715, 32956810, и т.д.), которые не повторяются.
Правая сторона подчеркивания является также числами (например, 1, 2, 3, и т.д.), и они действительно повторяются.
Пример отправляется в pastebin
(Левая сторона является количеством сканирования, и правая сторона является страницей того конкретного сканирования.)
Я хотел бы смочь отсортировать левую сторону подчеркивания Z-A и правая сторона A-Z.
Пример:
3_1
3_2
3_3
2_1
2_2
2_3
1_1
1_2
1_3
Я открыт для любых предложений, которые достигают результата, который я ищу.
В настоящее время я использую irfanview для отправки имен файлов в текстовый файл, затем копируя и вставляя текст в Excel, разделяя имена файлов в colums, затем сортируя столбец с Левой стороной подчеркивания Z-A и столбец с Правой стороной подчеркивания A-Z. Затем у меня чрезвычайно обратный процесс и есть irfanview загрузка средства просмотра миниатюры файлы с помощью txt файла, созданного из моего правильно отсортированного списка Excel.
Должен быть лучший путь право?
Спасибо!
ОБНОВЛЕНИЕ
Больше информации, чтобы попытаться разъяснить вопрос. Я смущен для принятия этого, но конечный результат состоит в том, чтобы распечатать каждый из этих файлов и сделать, чтобы они были навзничь в обратном хронологическом порядке (новейший документ о вершине (навзничь) и самый старый документ о нижней части (навзничь)). (Печать не очень технически подкована, это? Я могу все еще быть в клубе суперпользователя-.)
Клиент дает нам диск изображенных документов (размолвки или gifs с jpgs, смешанным в). Диски могут иметь где угодно от 50 до 20 000 изображений на них. Я должен распечатать их. Меньшие изображения numbers=older и большие изображения numbers=newer. Я использую средство просмотра миниатюры Irfanview для пакетной печати к большому копировальному устройству. Прямо сейчас я могу только отсортировать изображения A-Z прежде, чем распечатать, все еще сохраняя их в некотором распознаваемом порядке. Затем я должен пройти печатный стек и сделать обратную хронологическую сортировку меня. Это является очень трудоемким, и с вложениями к документам трудно определить, где остановки документа и следующее начинаются.
Я не уверен, понял ли я вопрос. Если левый набор цифр никогда не повторяет затем, что проблема не существует. У Вас не может быть ситуации как 30000_1, 30000_2, потому что левая сторона не повторяется. – Sahil
Вы корректны. Они действительно повторяются, существует ли больше чем одна страница в отсканированном документе. Я просто пытался дифференцировать такое повторение от повторения на правой стороне, которая всегда запускается с 1 и подсчитывает на основе числа страниц в документе.
Я хочу благодарить всех, кто уже задал вопросы. Это означает, что Вы, по крайней мере, читаете вопрос и попытались бы помочь, если я не пошел на многое для смущения Вас. Я надеюсь, что моя дополнительная информация отвечает на другие вопросы, которые я не рассматривал конкретно.
Ответ сценария Lua выглядит многообещающим, но я получаю ошибку при попытке использовать его. Мысли?
lua -e "io.stdout:setvbuf 'no'" "Reverse_Sort.lua"
lua: Reverse_Sort.lua:16: attempt to compare number with nil
stack traceback:
Reverse_Sort.lua:16: in function <Reverse_Sort.lua:6>
[C]: in function 'sort'
Reverse_Sort.lua:32: in main chunk
[C]: ?
Exit code: 1
Так как Вы сказали, что это - повторяющаяся проблема, сценарий является соответствующим.
Вот сценарий Lua для получения Вас движение.
Править: Я обновил сценарий на основе Вашей дополнительной информации. Это возьмет файл, содержащий имена файлов, отсортирует их и создаст новый файл в отсортированном порядке.
Сценарий (отредактирован)
-- Get input and output filenames from the command line or pick defaults input_filename = arg[1] or 'unsorted.txt' output_filename = arg[2] or 'sorted.txt' -- Define custom sort function function custom_sort(filename1, filename2) a, b = string.match(filename1, '(%d+)_(%d+)') c, d = string.match(filename2, '(%d+)_(%d+)') a = tonumber(a) b = tonumber(b) c = tonumber(c) d = tonumber(d) if a > c then return true elseif a < c then return false else return b < d end end -- Read filenames from file into table local filenames = {} for line in io.lines(input_filename) do filenames[# filenames + 1] = line end -- Sort table using our custom sort function table.sort(filenames, custom_sort) -- Write sorted filenames to file io.output(output_filename) for _,filename in ipairs(filenames) do io.write(filename, '\n') end -- Done
Lua имеет os.rename () функция, чтобы на самом деле сделать переименование файла, или Вы могли, вероятно, вывести текстовый вывод сценария в утилиту переименования.