【问题标题】:Rename directories from abc.folder.xyz to folder.xyz将目录从 abc.folder.xyz 重命名为 folder.xyz
【发布时间】:2011-12-12 02:06:03
【问题描述】:

假设我有一个目录,里面有一堆网站名称。

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

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

我到达了一个点而不是卡住了。

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

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

【问题讨论】:

  • 您想将什么重命名为.com?不是所有的文件,对吧?
  • 只是目录名称。该目录中只有目录,没有文件,所以答案不需要考虑inode类型。

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


【解决方案1】:

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

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

【讨论】:

  • rename 不能在所有版本的 linux 中移植
  • 有问题的版本是什么?
  • IIRC 它大多是较旧的。重命名是较新的,而不是“标准”工具包的一部分,部分原因是它只是一个 perl 脚本。注意精简的构建,例如上网本或嵌入式构建,以及较旧的 debian 构建。
【解决方案2】:
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

【讨论】:

【解决方案3】:

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

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 

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2011-05-15
      • 1970-01-01
      • 2016-07-15
      • 2011-11-19
      • 1970-01-01
      相关资源
      最近更新 更多