Подстановка в переименованном файле - PullRequest
1 голос
/ 04 января 2012

Мне нужна помощь со следующим:

У меня есть эти файлы с именами: ABC.rt1, ABC.rt2, ... , ABC.rt8

Я должен переименовать их все следующим образом: если число, скажем, i в конце .rt${i} нечетно, то заменить расширение на добавление AB, иначе CD. Например, я ожидаю, что эти выходные данные:

ABC.rt1 -> ABC.rt1-AB

ABC.rt2 -> ABC.rt1-CD ... и т. Д.

Я пытался использовать этот простой скрипт, но он не работает:

for i in `seq 1 8`; do mv -v ./ABC.rt${i} ./ABC.rt${if [ $(( $i % 2 )) -eq 0 ] ; then echo ${i}-CD; else echo ${i}-AB;fi};done

Вы можете мне помочь?

Ответы [ 4 ]

4 голосов
/ 04 января 2012

В этом конкретном примере может быть проще сделать два цикла?

for i in *[1357];do mv -v $i $i-AB;done
for i in *[2468];do mv -v $i $i-CD;done

Если необходимо создать общее решение, пожалуйста, дайте мне знать, и я помогу больше.

2 голосов
/ 04 января 2012

Попробуйте:

for i in `seq 1 8`; do
  if [ $(( $i % 2 )) -eq 0 ] ; then
    newext=${i}-CD
  else
    newext=${i}-AB
  fi
  mv -v ./ABC.rt${i} ./ABC.rt$newext
done

Не пытайтесь втиснуть все это в одну строку, это невозможно прочитать, и ваш синтаксис окажется неверным.

0 голосов
/ 04 января 2012

Вот, пожалуйста, все, коротко и кратко:

for f in *[1-8]
do
    mv $f $f-`echo $f | grep -q '[1357]$' && echo AB || echo CD`
done
0 голосов
/ 04 января 2012
perl -e'while(<*.rt?>) { rename $_, $_.($1 % 2 ? "-AB" : "-CD") if /\.rt(\d)$/ }'

До:

a.rt1  a.rt2

После того, как:

a.rt1-AB  a.rt2-CD

Примечание: это отличается от примера в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...