将目录从abc.folder.xyz重命名为folder.xyz

时间:2011-10-20 19:48:30

标签: linux bash command-line-interface rename mv

假设我有一个包含大量网站名称的目录。

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

如何使用管道和/或重定向bas​​h将这些名称重命名为linux cli上的<domain>.com

我得到了一点,而不是卡住了。

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

给了我域名部分,但我无法理解。不确定awk是答案。任何建议都表示赞赏。

4 个答案:

答案 0 :(得分:2)

要从名称中删除前导'dev.',它应该是这样的:

for i in $(find * -maxdepth 1 -type d); do mv $i $(echo $i | sed 's/dev.\(.*\)/\1/'); done

答案 1 :(得分:1)

尝试rename命令。它可以采用这样的正则表达式:

rename 's/\.domain.*/.com/' *.com

答案 2 :(得分:1)

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 < / p>

答案 3 :(得分:0)

在您要使用的目录下,尝试:

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