重命名字母数字文件

重命名字母数字文件

我的目录中有以下文件:

 GE.AARS_vs_Control16.txt
 GE.DHX30_vs_Control18.txt
 GE.DNAJC2_vs_Control18.txt

我想删除*_Control<numeric>并替换它*_Others,以便文件将被重命名为

 GE.AARS_vs_Others.txt
 GE.DHX30_vs_Others.txt
 GE.DNAJC2_vs_Others.txt

答案1

for file in /dir/*.txt; do
    mv "$file" "${file%_*}_Others.txt"
done

${file%_*}是 shell 参数扩展的一种形式,它将删除最后一个_及以后的所有内容。

答案2

使用 Perlrename工具,假设您位于与要重命名的文件相同的目录中:

rename 's/_Control1[68]/_Others/' GE.*_Control1[68].txt

答案3

如果你喜欢一点混淆,这里还有另一种方法:

paste <(ls) <(ls | sed 's/_Control1[68]/Others') | sed 's/^/mv /' | bash

首先,尝试在不使用 bash 的情况下运行管道:-) 我假设目录中没有其他文件。如果有,请将每个替换lsls *Controll1[68].txt或某些类似的内容,以限制列表。

“我宁愿编写程序来编写程序,也不愿编写程序” - Richard Sites

(我可以发誓那是 Alan Perlis,但 Google 不同意)。

相关内容