Я хочу изменить несколько имен файлов с их предыдущими именами с помощью сценария, например, изменить имена файлов как указано ниже:
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
Один путь с 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)
Скрипт 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