Переименовать файлы в подкаталоги

Переименовать файлы в подкаталоги

Я пытаюсь переименовать несколько файлов с помощью «rename», и у меня есть правильно настроенное регулярное выражение:

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *

Но мне бы очень хотелось, чтобы каждый файл был помещен в каталог с общим началом, поэтому я попробовал:

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *

Но это жалуется, что ни один из каталогов не существует (так как их нет). Я упускаю полезный флаг для переименования или это лучший инструмент для этого?

решение1

Если вы используете Perl-ориентированный метод rename, то ничто не мешает вам вызвать mkdir()для создания недостающих каталогов:

rename --verbose '
    s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
    mkdir("$2 ($1)")' *

Это то же выражение Perl, которое вы используете, с добавленным вызовом mkdir()в конце для создания каталога, если выражение совпадает.

Является ли исходная подстановка правильной или нет, и имеет ли она смысл, я не знаю (я не знаю, какие типы имен файлов у вас есть). Дело в том, что поскольку выражение является общим выражением Perl, вы можете использовать любой код Perl, пока $_(переменная по умолчанию) установлена ​​на результирующее имя файла в конце.

Связанный контент