이름을 바꾸지 않고 여러 파일 이름 바꾸기 및 재정렬

이름을 바꾸지 않고 여러 파일 이름 바꾸기 및 재정렬

와 같은 이름을 가진 파일로 가득 찬 디렉토리가 거의 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모든 매핑에 대한 문을 확장 하고 a로 묶으면 for filename in *.pdf출력을 확인할 수 있습니다. 그런 다음 다음으로 변경하십시오 echo.

mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"

관련 정보