이름을 바꾸지 않고 여러 파일 이름을 바꾸고 재정렬합니다.

이름을 바꾸지 않고 여러 파일 이름을 바꾸고 재정렬합니다.

나는 이와 같은 이름을 가진 파일로 가득 찬 거의 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"

관련 정보