2015-01-02 7 views
2

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

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

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

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

+1

Это происходит потому, что у вас так много файлов расширенных с '* .log шаблон. Может быть, вы можете использовать 'find' или' while' loop – fedorqui

ответ

4

, вероятно, самое простое решение, так как вы используете Баш, чтобы пройти по списку файлов с 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

+1

'for i in * .log' не имеет этих ограничений, и использование' \ 'ls' \' всегда подвержено ошибкам и его следует избегать. – glglgl

+0

спасибо, отредактировал мой ответ, чтобы быть более ясным. –

2

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

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

ls *.log | xargs rename -n 's/\Name1_/\Name2_/' 
+0

У меня нет доступа к UNIX-терминалу здесь на работе, поэтому не уверен, правильно ли я получил синтаксис, но я думаю, он должен работать. –

+0

Получение такой же ошибки с помощью этой команды –

+1

В вашей исходной команде (которую вы отправили в вопросе) попробуйте сначала загрузить меньше файлов (скажем, 10 или около того). Посмотрите, получится ли это. –

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