我想使用脚本将多个文件名更改为原来的名称,例如按如下方式更改文件名:
2015-08-25___LSA_SP_E_txt ---> 20150825.IT.SPE.LSA.txt
2015-08-25___HSB_BH_Z_txt ---> 20150825.IT.BHZ.HSB.txt
2015-08-25___TEH_SP_N_txt ---> 20150825.IT.SPN.TEH.txt
2015-08-25___ANJ_BH_E_txt ---> 20150825.IT.BHE.ANJ.txt
答案1
一种方法是rename
:
rename -n 's/-//g;s/___(\w*)_(\w*)_(\w*)_/.IT.$2$3.$1./' *
在-n
ono 模式下,这只会打印更改,删除此标志以执行重命名。第一个表达式只是删除每个连字符,第二个表达式保存字符串并替换下划线部分。
另一种方法是保存一切您需要分组,这样您还可以快速更改日期:
rename -n 's/(\d*)-(\d*)-(\d*)___(\w*)_(\w*)_(\w*)_/$1$2$3.IT.$5$6.$4./' *
示例运行
$ rename -n 's/-//g;s/___(\w*)_(\w*)_(\w*)_/.IT.$2$3.$1./' *
rename(2015-08-25___ANJ_BH_E_txt, 20150825.IT.BHE.ANJ.txt)
rename(2015-08-25___HSB_BH_Z_txt, 20150825.IT.BHZ.HSB.txt)
rename(2015-08-25___LSA_SP_E_txt, 20150825.IT.SPE.LSA.txt)
rename(2015-08-25___TEH_SP_N_txt, 20150825.IT.SPN.TEH.txt)
答案2
Bash 脚本(script.sh)用于重命名多个文件。
#!/bin/bash
INPUT="$1"
IFS=,
[ ! -f "$INPUT" ] && { echo "$INPUT file not found"; exit 99; }
while read old_name new_name
do
rename "$old_name" "$new_name" # mv or rename
done < "$INPUT"
Input.txt文件格式:
old_name1.txt,new_name1.txt
old_name2.txt,new_name2.txt
使用:
bash script.sh input.txt