2

假设我有一个目录,其中包含一堆站点名称。

IE

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

如何<domain>.com使用管道和/或重定向 bash 在 linux cli 上将它们重命名为?

我明白了一点,而不是卡住了。

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

给了我域部分,但我无法超越。也不确定 awk 是否是答案。任何建议表示赞赏。

4

4 回答 4

2

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

for i in $(find * -maxdepth 1 -type d); do mv $i $(echo $i | sed 's/dev.\(.*\)/\1/'); done
于 2011-10-20T22:06:20.083 回答
1

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

rename 's/\.domain.*/.com/' *.com
于 2011-10-20T20:00:32.603 回答
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

于 2011-10-20T20:07:38.273 回答
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 
于 2011-10-20T20:44:50.737 回答