当前位置:  开发笔记 > 编程语言 > 正文

如何进行大规模重命名?

如何解决《如何进行大规模重命名?》经验,为你挑选了4个好方法。

我需要重命名这样的文件名

transform.php?dappName=Test&transformer=YAML&v_id=XXXXX

就是这样

XXXXX.txt

我该怎么做?

我知道我需要多个mv命令,因为它们至少有25000个文件.



1> nimrodm..:

最简单的解决方案是使用"mmv"

你可以写:

mmv "long_name*.txt" "short_#1.txt"

其中"#1"被第一个通配符匹配的任何内容替换.类似地,#2被第二个等替换.

所以你做的事情就像

mmv "index*_type*.txt" "t#2_i#1.txt"

要将index1_type9.txt重命名为t9_i1.txt

mmv在许多Linux发行版中都不是标准版,但很容易在网上找到.



2> d0k..:

如果您使用zsh,您也可以这样做:

autoload zmv
zmv 'transform.php?dappName=Test&transformer=YAML&v_id=(*)' '$1.txt'


即使他正在使用bash,他总是可以运行zsh然后使用这个答案.

3> Charlie Mart..:

你编写了一个相当简单的shell脚本,其中最棘手的部分是重命名.

脚本的大纲很简单(bash语法在这里):

for i in 'transform.php?dappName=Test&transformer=YAML&v_id='*
do
    mv $i 
done

修改名称有很多选项.我认为最简单的可能就是像单行的一样

`echo $i  |  awk -F'=' '{print $4}'`

所以...

for i in 'transform.php?dappName=Test&transformer=YAML&v_id='*
do
    mv $i `echo $i |  awk -F'=' '{print $4}'`.txt 
done

更新

好的,正如下面所指出的,这不一定适用于足够大的文件列表;*将超出命令行长度限制.那么,你使用:

$ find . -name 'transform.php?dappName=Test&transformer=YAML&v_id=*' -prune -print |
while read
do
    mv $reply `echo $reply |  awk -F'=' '{print $4}'`.txt 
done



4> brien..:

尝试重命名命令

或者你可以将ls的结果输入到perl正则表达式中.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有