如果我有一组类似这样的文件:
1-3-Image Export-08_s3c1.jpg
我想将第一部分重命名为如下所示的内容,通过添加并将第一部分替换为“G2_NR2_replicate2”:
G2_NR2_replicate2_s3c1.jpg
我如何在终端中批量处理这个?
答案1
rename
在所有文件所在的目录中运行以下命令.jpg
,
rename 's/^[^_]*(.*)$/G2_NR2_replicate2\1/' *.jpg
它重命名所有格式为(姓名),
1-3-Image Export-08_s3c1.jpg
1-3-Image Export-08_s3c2.jpg
......
1-3-Image Export-08_s3c1000.jpg
到
G2_NR2_replicate2_s3c1.jpg
G2_NR2_replicate2_s3c2.jpg
.....
G2_NR2_replicate2_s3c1000.jpg
解释:
's/^[^_]*(.*)$/G2_NR2_replicate2\1/'
rename
命令的作用与命令相同sed
。(s/pattern/replace/
)在模式部分,我们给出模式如下
^[^_]*(.*)$
^
--> 起点[^_]*
--> 匹配除_
零次或多次之外的任何字符。因此它匹配到此部分1-3-Image Export-08
,并且捕获此部分之后的任何字符(s3c1
)并将其存储到由此模式表示的组中(.*)$
。G2_NR2_replicate2
现在在替换部分,我们放置由 op( ) 加上捕获的组给出的文本。
最后
rename
命令执行整个操作。
答案2
编辑:@Avinash Raj 的答案更好。改用命令,rename
如下所示。
尝试sed
使用for
。参见:http://www.linuxquestions.org/questions/linux-general-1/bash-bulk-rename-files-4175429502/#post4792222