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

发布于 2024-12-11 11:20:20 字数 375 浏览 0 评论 0原文

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

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

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

我到达了一个点,而不是陷入困境。

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

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

Say I have a directory with a bunch of site names in it.

i.e.

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

How can I rename those to <domain>.com on the linux cli using piping and/or redirection bash?

I get to a point than am stuck.

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

Gives me the domain part, but I can't get past that. Not sure awk is the answer either. Any advice is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

裂开嘴轻声笑有多痛 2024-12-18 11:20:20

要从名称中删除前导 'dev.' ,应如下所示:

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

To strip the leading 'dev.' from names it should be like this:

for i in $(find * -maxdepth 1 -type d); do mv $i $(echo $i | sed 's/dev.\(.*\)/\1/'); done
小情绪 2024-12-18 11:20:20
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

for i in *; do mv $i $( echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/' ); done

Explained:

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

do it for every file

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

takes three groups of "every character except ." and changes their order
\2.\1 means: print second group, a dot, first group

the $( ... ) takes output of sed and "pastes" it after mv $i and is called "command substitution" http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution

临风闻羌笛 2024-12-18 11:20:20

尝试使用重命名命令。它可以采用如下正则表达式:

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

Try the rename command. It can take a regular expression like this:

rename 's/\.domain.*/.com/' *.com
甲如呢乙后呢 2024-12-18 11:20:20

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

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 

under the directory you want to work with, try :

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

will print mv command. if you want to do the rename, add "|sh" and the end:

 ls -dF *|grep "/$"|awk  'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}'|sh 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文