2012-04-07 2 views
2

Я пытаюсь заменить все символы _ подчеркиванием на - символ дефиса во всех именах файлов .mat внутри одной папки. набирают разные версии неудачно из:Подчеркивание в команде rename (оболочка Perl и Unix)

rename -f 'w/_/-' *.mat 

Может кто-нибудь объяснить мне, что это не так?

ответ

4

Если вы используете a Perl-based rename (как предлагают ваши теги), то w не является регулярным выражением Perl.

rename -f 's/_/-/g' *_*.mat 
+0

Спасибо, @Daxim. Я по-прежнему использую слегка обновленную версию Perl 'rename' из 1-го издания Верблюжьей книги. –

+0

Эта работа !!! спасибо @Leffler. Сначала я попробовал с 's', но потом изменился на 'w'. Но я не знаю, что я должен использовать g в финале – escorciav

+0

@escorciav: AFAIK, 'w' не является оператором замещения Perl. 'G' в конце гарантирует, что все символы подчеркивания заменены дефисами. Если вам нужен только первый символ подчеркивания, вам не нужен 'g'. Вероятно, есть вероятность, что сценарий автоматически применяет 'g'. –

2

Я не могу понять, используется ли оболочка переименовать или Perl переименовать: Я не могу понять вашу команду в любом контексте.

Perl-сценарий для командной строки, чтобы переименовать все *.mat файлов в текущем каталоге выглядит следующим образом

perl -e 'do { (my $f = $_) =~ tr/_/-/; rename $_, $f } for glob "@ARGV"' *.mat 
+1

Замените 'glob" @ARGV "' на '@ ARGV'. Ты глотаешь что-то, что уже всплыло. Это либо ничего не даст, либо даст неправильные результаты в зависимости от имен файлов. В частности, ваш шаблон будет терпеть неудачу, если какой-либо из 'mat'-файлов имеет место в их имени. [ИСПРАВЛЕНО] – ikegami