Я предполагаю, что вы уверены, что ни одно из ваших имен файлов не содержит символов новой строки или что у вас есть какой-то способ справиться с этой возможностью.
Во-первых, управляйте именами файлов с помощью sed
:
% command_to_list_filenames | sed 's/.*\.\([0-9][0-9][0-9][0-9]\)\..*/\1.&/'
2001.Could Be A Title.2001.prop.ext1
1989.Another Potential Title.1989.prop.ext2
%
Команда s
(заменитель) в команде sed
обрабатывает каждую строку как последовательность следующего:
- Любое число любого символа (
.*
),
- Фактический период (
\.
),
- Четыре цифры (
[0-9][0-9][0-9][0-9]
),
- Еще один фактический период (
\.
) И
- Другая последовательность символов (
.*
)
Обратите внимание, что год ([0-9][0-9][0-9][0-9]
) заключен между \(
и \)
, образуя группу.
Затем команда замены заменяет строку на
- Сгруппированные символы, т. Е. Год (
\1
),
- Точка (
.
) И
- Вся строка ввода (
&
).
Тогда нужно просто отсортировать строки по году (который теперь появляется в начале строки) и удалить год:
% command_to_list_filenames | sed 's/.*\.\([0-9][0-9][0-9][0-9]\)\..*/\1.&/' | sort
1989.Another Potential Title.1989.prop.ext2
2001.Could Be A Title.2001.prop.ext1
% command_to_list_filenames | sed 's/.*\.\([0-9][0-9][0-9][0-9]\)\..*/\1.&/' | sort |
sed 's/^[0-9][0-9][0-9][0-9].//'
Another Potential Title.1989.prop.ext2
Could Be A Title.2001.prop.ext1
%
Команда sed
может быть тривиально изменена для обработки другого шаблона.
И sed
может принимать входные данные из файла вместо канала:
% sed 's/.*(\([0-9][0-9][0-9][0-9]\)).*/\1.&/' list_of_directory_names | sort |
sed 's/^[0-9][0-9][0-9][0-9].//'
Charlie Fisher's (1989)
Badger Bodger (2001)
%
Обратите внимание, что это прекрасно работает с текстом, который содержит точки или скобки, например,
Dr. Strangelove.1964.foo
Mrs. Doubtfire.1993.bar
до тех пор, пока за ними не следуют четырехзначные числа.
Вы можете оставить второй .*
Если хотите:
% command_to_list_filenames | sed 's/.*\.\([0-9][0-9][0-9][0-9]\)\./\1.&/'
2001.Could Be A Title.2001.prop.ext1
1989.Another Potential Title.1989.prop.ext2
%