Ответ 1
Как насчет этого:
for i in *.II; do mv $i $(echo $i | sed 's/_13/_15/g'); done
Это заменит _13
на _15
во всех файлах с расширением .II
Подробнее о sed здесь.
Я хотел бы изменить это
cc211_AMBER_13062012i.II cc211_GROMOS_13062012i.II
cc211_CHARM_13062012i.II cc211_OPLS_13062012i.II
к
cc211_AMBER_15062012i.II cc211_GROMOS_15062012i.II
cc211_CHARM_15062012i.II cc211_OPLS_15062012i.II
Я пробовал,
find -name "*.13 *" | xargs rename ".13" ".15"
Как правило, между 3-й и второй астерикса нет пробела, и это просто делает курсивом то, что я вижу. В основном есть много ответов о том, что делать, когда он находится в конце имени файла, где, похоже, работает asterix, но здесь я не могу заставить его работать.
Все, что у вас есть, облегчит мне жизнь!
Изменить 1: пробный
-bash-4.1$ ls
cc211_AMBER_13062012.II cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II cc211_OPLS_13062012.II
-bash-4.1$ rename 's/_13/_15/' cc*
-bash-4.1$ ls
cc211_AMBER_13062012.II cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II cc211_OPLS_13062012.II
Спасибо,
Charlie
Как насчет этого:
for i in *.II; do mv $i $(echo $i | sed 's/_13/_15/g'); done
Это заменит _13
на _15
во всех файлах с расширением .II
Подробнее о sed здесь.
Чистое решение bash
:
for i in cc*; do
mv "$i" "${i/_13/_15}"
done
rename 's/_13/_15/' cc*
Должен делать то, что вы хотите. Регулярное выражение s/_13/_15/
заменяет _13
на _15
во всех файлах, начинающихся с 'cc'.
$ ls
cc211_AMBER_13062012.II cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II cc211_OPLS_13062012.II
$ rename 's/_13/_15/' cc*
$ ls
cc211_AMBER_15062012.II cc211_GROMOS_15062012.II
cc211_CHARM_15062012.II cc211_OPLS_15062012.II
Это будет работать только с новой версией perl rename
. Чтобы проверить, какая версия у вас есть, man rename
. Если в верхней части страницы указано
Справочное руководство для программистов на Perl
у вас есть версия perl. Если он говорит:
Руководство для программистов Linux
у вас стандартная (более старая) версия.
Для старшей версии команда должна быть:
rename _13 _15 cc*
Я использую чистое решение для Linux:
### find all files that contains _DES in name and duplicate them adding _AUXLOCAL
for f in **/*_DES*; do
cp "$f" "${f%.DES}_AUXLOCAL"
done
###Rename all _AUXLOCAL files, removing _DES to _LOCAL
for f in **/*_AUXLOCAL*; do
mv "$f" "${f/_DES/_LOCAL}"
done
###Rename all _AUXLOCAL files, removing _AUXLOCAL
for f in **/*_AUXLOCAL*; do
mv "$f" "${f/_AUXLOCAL/}"
done
Я надеюсь, что это поможет