Функция переименования в Linux используется неправильно - PullRequest
1 голос
/ 22 декабря 2010

Я пытаюсь использовать команду переименования в терминале в Ubuntu, чтобы добавить строку в начало некоторых имен файлов avi следующим образом.

rename -n 's/(\w)\.avi$/String_to_add__$1\.avi/' *.avi

Так что я ожидаю следующего:

String_to_add_MyMovie.avi

Проблема в том, что когда я запускаю команду, она добавляет строку в конец имени файла, поэтому я получаю следующее:

MyMovie_String_to_add_.avi

Я не уверен, что у меня неправильный синтаксис perlexpr или что-то еще. Любое понимание приветствуется.

UPDATE:

Спасибо за предложения, я попробовал предложения от alno и plundra и сделал следующую модификацию:

rename -n 's/(\w+)\.avi$/String_to_add__$1\.avi/' *.avi

Но теперь файл получает строку, вставленную в середине имени, следующим образом:

My_String_to_add_Movie

Мои извинения, но я не упомянул, что заголовкам предшествуют 3 числовых значения, поэтому номенклатура имени файла равна {3 numbers}-My_Movie.avi, например, 001-My_Movie.avi. Но я не думал, что это будет иметь значение, так как я предполагаю, что \w+ соответствует буквенно-цифровым символам, может ли быть проблема "-"?

Еще не попробовал подход Кристиана, я хочу использовать команду переименования или хотя бы понять, почему она не работает, прежде чем я попробую другой подход.

Ответы [ 3 ]

2 голосов
/ 22 декабря 2010

Я не думаю, что переименование -n является стандартным.Вы можете сделать это:

for i in *.avi; do mv $i String_to_add_$i; done
1 голос
/ 22 декабря 2010

Правильная версия:

rename -n 's/(\w+)\.avi$/String_to_add__$1\.avi/' *.avi

Вы просто забыли + после \ w, поэтому он попытался найти только один символ.

1 голос
/ 22 декабря 2010

Вы соответствуете только одному символу с \w, вам нужно \w+, поэтому полная строка будет выглядеть так:

rename -n 's/(\w+)\.avi$/String_to_add__$1\.avi/' *.avi
...