2011-10-20 48 views
2

假设我有一个包含一堆网站名称的目录。将目录从abc.folder.xyz重命名为folder.xyz

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

我如何使用命名管道和/或重定向bas​​h的那些<domain>.com在Linux命令行?

我得到了一个比我坚持一个点。

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

给我的领域的一部分,但我不能超过那个。不确定awk是否也是答案。任何建议表示赞赏。

+0

你想什么重命名为'.COM '?不是所有的文件,对吧? – ayoy

+0

只是目录名称。这个目录中只有目录,没有文件,所以答案不需要考虑inode类型。 – Spechal

回答

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

+0

这个答案是在Spechal编写他的问题http://stackoverflow.com/users/427387/spechal –

+0

for i in *; do mv $ i $(echo $ i | sed's/\([^ \。] * \)。\([^ \。] * \)。\([^ \。] * \)/ \ 2。 \ 3 /'); DONE – Spechal

1

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

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

重命名是不可移植的所有版本的Linux –

+0

什么是有问题的版本? – topek

+0

IIRC它大多是旧的。重命名更新,而不是“标准”工具包的一部分,部分原因是它只是一个perl脚本。注意瘦身版本,如上网本或嵌入式版本,以及旧版debian版本。 –

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 
1

要剥去名领导'dev.'它应该是这样的:

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