Переименуйте каталоги из abc.folder.xyz в folder.xyz - PullRequest
2 голосов
/ 20 октября 2011

Скажем, у меня есть каталог с кучей названий сайтов.

т.е.

dev.domain.com
dev.domain2.com
dev.domain3.com

Как я могу переименовать их в <domain>.com на linux cli, используя piping и / или bash для перенаправления?

Я дошел до того, что застрял.

find . -maxdepth 1 | grep -v "all" | cut --delimiter="." -f3 | awk '{ print $0 }'

Дает мне доменную часть, но я не могу пройти мимо. Не уверен, что awk - это тоже ответ. Любой совет приветствуется.

Ответы [ 4 ]

2 голосов
/ 21 октября 2011

Чтобы убрать ведущие 'dev.' из имен, это должно быть так:

for i in $(find * -maxdepth 1 -type d); do mv $i $(echo $i | sed 's/dev.\(.*\)/\1/'); done
1 голос
/ 21 октября 2011
for i in *; do mv $i $( echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/' ); done

Разъяснения:

for i in *; do ....; done

сделать это для каждого файла

echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/'

принимает три группы «кроме каждого символа». и меняет их порядок \ 2. \ 1 означает: вывести вторую группу, точку, первую группу

$ (...) получает вывод sed и «вставляет» его после mv $ i и называется «подстановка команд» http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution

1 голос
/ 21 октября 2011

Попробуйте команду rename .Это может принимать регулярное выражение вроде этого:

rename 's/\.domain.*/.com/' *.com
0 голосов
/ 21 октября 2011

в каталоге, с которым вы хотите работать, попробуйте:

ls -dF *|grep "/$"|awk  'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}'

выведет команду mv. если вы хотите сделать переименование, добавьте "|sh" и в конце:

 ls -dF *|grep "/$"|awk  'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}'|sh 
...