重命名文件名的一部分[重复](Renaming part of a filename [duplic

2019-07-05 15:47发布

这个问题已经在这里有一个答案:

  • 重命名基于模式的多个文件中的Unix 21个回答

我有文件的加载它看起来就像这样:

DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat

我想他们是这样的:

DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat

我怎样才能做到这一点?

Answer 1:

有一对夫妇的重命名命令的变种,在你的情况下,它可能是那样简单

rename ABC XYZ *.dat

你可能有一个版本,这需要一个Perl的正则表达式;

rename 's/ABC/XYZ/' *.dat


Answer 2:

for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done

没有renamesed需要。 刚bash的参数扩展 。



Answer 3:

像这样的东西会做。 该for循环可能需要根据其档案名称,你想捕捉进行修改。

for fspec1 in DET01-ABC-5_50-*.dat ; do
    fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
    mv ${fspec1} ${fspec2}
done

你应该总是在你的数据的拷贝测试这些脚本,顺便说一下,在完全不同的目录。



Answer 4:

你需要学习如何使用SED http://unixhelp.ed.ac.uk/CGI/man-cgi?sed

并且还通过您的文件条目使用的,所以你可以循环http://www.cyberciti.biz/faq/bash-for-loop/

你的命令会是这个样子,我没有一个术语在我的身边,所以我不能检查

for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`


Answer 5:

我喜欢用sed来做到这一点。 在你的情况:

for x in DET01-*.dat; do
    echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/'
done | sh -e

最好是先省略“-e SH”的部分,看看有什么会被执行。



Answer 6:

所有这些问题的答案是简单和良好的。 但是,我总是喜欢一个互动的模式添加到这些脚本,这样我可以找到误报。

如果[[-n $ inInteractiveMode]
然后
回声-e -n “?$ oldFileName => $ newFileName \ n要做到这一点变化[Y / N]:”
读运行

[[-z $运行|| “$运行” == “Y” || “$运行” == “Y”]] && MV “$ oldFileName” “$ newFileName”
科幻

或使互动模式的默认,并添加一个强制标志|自动化脚本(-f --force),或者如果你感觉大胆。 这不你慢下来太多:默认的回答是“是的,我要重命名”,所以你可以只打在每个提示回车键(因为``-z $运行\测试。



文章来源: Renaming part of a filename [duplicate]