我有一个列表,例如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的各种选项,但是我得到了不同的结果,而不是我期望的结果。
答案 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