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

Я пытаюсь переименовать файлы, например: Name1_searchstats_metrics_20141230T133000036.log, примерно так: Name2_searchstats_metrics_20141230T133000036.log

Я пытаюсь: rename -n 's/\Name1_/\Name2_/' *.log, но получаю сообщение об ошибке:

bash: /usr/bin/rename: Argument list too long

Может кто-нибудь помочь?


person Saurabh Verma    schedule 02.01.2015    source источник
comment
Это потому, что у вас так много файлов, расширенных шаблоном *.log. Может быть, вы можете использовать find или while цикл   -  person fedorqui 'SO stop harming'    schedule 02.01.2015


Ответы (2)


возможно, самое простое решение, поскольку вы используете bash, - это перебирать список файлов с помощью цикла for:

$ for i in *; do rename -n 's/Name1_/Name2_/' $i; done

при необходимости вы также можете отфильтровать файлы, используя любой подстановочный знак в команде, например *.log.

Есть и другие, более запутанные способы добиться этого, особенно если вам нужно выполнить определенные строковые манипуляции с именем файла, то есть с помощью awk или find -exec, но, надеюсь, это поможет вам разобраться в этом ясным образом.

Отредактированный ответ, предложенный @glglgl

более полное и подробное объяснение вышеизложенного можно найти на странице суперпользователя: https://superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script

person Mr Peach    schedule 02.01.2015
comment
for i in *.log не имеет этих ограничений, и использование `ls` всегда чревато ошибками, и его следует избегать. - person glglgl; 02.01.2015
comment
спасибо, отредактировал мой ответ, чтобы быть более понятным. - person Mr Peach; 02.01.2015

Если список аргументов слишком длинный для команды linux, на помощь обычно приходит xargs.

Попробуй это:

ls *.log | xargs rename -n 's/\Name1_/\Name2_/' 
person Masked Man    schedule 02.01.2015
comment
У меня здесь, на работе, нет доступа к терминалу UNIX, поэтому я не уверен, правильно ли я понял синтаксис, но я думаю, он должен работать. - person Masked Man; 02.01.2015
comment
Получение той же ошибки с этой командой также - person Saurabh Verma; 02.01.2015
comment
В исходной команде (которую вы разместили в вопросе) попробуйте сначала передать ей меньшее количество файлов (скажем, 10 или около того). Посмотрим, удастся ли это. - person Masked Man; 02.01.2015
comment
@SaurabhVerma Сколько файлов журнала вы передаете команде переименования? Если это несколько миллионов, возможно, что подсписки, созданные xargs, также слишком велики. Отказ от ответственности: я не знаю, как xargs разбивает свой ввод на подсписки, то есть насколько велик каждый подсписок и каков порог для переименования, чтобы его список ввода считался слишком большим. - person Masked Man; 02.01.2015