linux使用bash脚本或命令行一行批量重命名文件

时间:2014-07-31 09:54:37

标签: linux bash shell file-io

我有一个列表,例如100个带有命名约定的文件

<date>_<Time>_XYZ.xml.abc
<date>_<Time>_XYZ.xml
<date>_<Time>_XYZ.csv

例如

20140730_025373_XYZ.xml
20140730_015233_XYZ.xml.ab
20140730_015233_XYZ.csv

现在我想编写脚本,它将删除两个下划线之间的任何内容。例如在上面的例子中

remove 015233 and change 20140730_015233_XYZ.xml.ab to 20140730_XYZ.xml.ab
remove 015233 and change 20140730_015233_XYZ.csv to 20140730_XYZ.csv

我尝试了使用rename,cut,mv的各种选项,但是我得到了不同的结果,而不是我期望的结果。

4 个答案:

答案 0 :(得分:4)

如果要重命名当前目录中的文件,可以使用rename命令

rename 's/^([^_]*)_[^_]*(_.*)$/$1$2/g' *

答案 1 :(得分:3)

您可以使用sed

sed 's/\([^_]*\)_.*_\(.*\)/\1_\2/' files.list

答案 2 :(得分:3)

您也可以使用cut命令

cut -d'_' -f1,3 filename 

答案 3 :(得分:1)

for FILE in *; do mv "$FILE" "${FILE/_*_/_}"; done

更具体的是

for FILE in *.xml *.xml.ab *.csv; do mv "$FILE" "${FILE/_*_/_}"; done

此外:

for FILE in *_*_*.xml *_*_*.xml.ab *_*_*.csv; do mv "$FILE" "${FILE/_*_/_}"; done