나는 이와 같은 이름을 가진 파일로 가득 찬 거의 500개의 디렉토리를 가지고 e141107140847.pdf
있으며 사용자에게 친숙한 이름으로 이름을 바꿔야 합니다 2014_11_SDUXS_0847.pdf
. 예를 들어 for 루프와 sed를 사용하려고 했지만 어떻게 해야 할지 모르겠습니다. 모든 것을 하나로 모으십시오. 또한 rename
이 컴퓨터(FreeBSD)의 명령 에 액세스할 수 없습니다 .
매핑은 다음과 같습니다.
e
— 정크 문자는 삭제 예정입니다.14
— 로 번역됩니다SDUXS
. 처리해야 할 매핑이 36개 있습니다.11
- 달07
— 일, 삭제 예정14
— 연도, 4자리로 변환됨0847
— 위치 코드, 예약됨.
답변1
따라서 이를 구체적인 예로 결합하면 다음과 같습니다.
#!/bin/bash
filename='e141107140847.pdf'
echo Given file name ${filename} -
case ${filename:1:2} in
14)
mapping="SDUXS"
;;
*)
mapping="XXXXX"
;;
esac
month="${filename:3:2}"
year="20${filename:7:2}"
location="${filename:9:4}"
echo New filename - ${year}_${month}_${mapping}_${location}.pdf
원하는 결과를 얻을 수 있을 것 같습니다. case..esac
매핑된 모든 문을 확장 하고 for filename in *.pdf
; 로 묶어서 출력을 확인할 수 있습니다 echo
.
mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"