2014-02-16 4 views
2

Я пытаюсь использовать версию rename (utilis linux) util-linux для замены определенной строки во всех файлах другим. Хотя я понимаю, что Perl-версия переименования предложит решение, я не могу понять, как использовать эту версию переименования.Использование команды переименования util-linux

Конкретный пример - это набор файлов (что-то - 2013.mkv, somethingelse - 2011.mkv), и я пытаюсь удалить двойные тире и заменить пробелом.

+1

вы попробовать что-то вроде этого 'переименовать«ю.ш./-/\ \/'* .mp4' – neeru

+2

rename' s /// 'является синтаксисом для версии perl, а не версии util-linux. Если бы я использовал версию perl, ваша команда работала бы на файлах .mp4 :) – user3179658

+0

'-' означает «конец опций» для программ с использованием 'getopt' (например,' rename'). Решение, скорее всего, найдет способ обойти это. Возможно, вы могли бы перевести '-' во что-то еще в первую очередь (например,' _'), а затем заменить это? – jackrabbit

ответ

3

Проблема заключается в том, что rename использует getopt для аргумента синтаксического анализа и, следовательно, имеет специальную интерпретацию для двойного тира (--). -- означает конец аргументов.

Решение состоит в том, чтобы избежать использования в вашей команде --. Один из способов сделать это - разбить вашу команду на подцели, например. перевод одного тире, чтобы подчеркнуть, затем два подчеркивания в одном тире:

$ rename - _ *.mkv 
$ rename __ - *.mkv 

менее окольный способ сделать это реально использовать getopt поведение на

$ rename -- -- - *.mkv 
0
mkdir TEMP 
numbers=2011 
find . -name "*.mkv" | while read filename 
do 
    echo mv "$filename" "TEMP/somethingelse_"$((numbers++)).mkv 
    rm filename 
done 
+0

этот скрипт не использует версию rename для использования util-linux. – user3179658

Смежные вопросы