파일 이름의 날짜를 기준으로 파일의 수정 날짜를 변경합니다.

파일 이름의 날짜를 기준으로 파일의 수정 날짜를 변경합니다.

다음 형식의 파일 이름을 가진 사진으로 가득 찬 디렉토리가 있습니다 IMG-20160305-WA0001.jpg. 촬영 날짜는 파일 제목에 분명하게 표시됩니다. 안타깝게도 모든 파일에는 오늘 수정 날짜가 있습니다. 올바른 날짜로 다시 설정하고 싶습니다.

나는 bash이름의 날짜 부분을 추출한 다음 touch -a -m -t 201603050900 IMG-20160305-WA0000.jpg각 파일의 날짜 부분을 차례로 추출하는 스크립트를 생각하고 있습니다(각 파일에 대해 올바른 날짜를 사용). 시간은 중요하지 않습니다.

답변1

bash문자열 연산만 사용하여 날짜를 추출하는 예:

#!/bin/bash

for name in IMG-[0-9]*.jpg; do
    touch -amt ${name:4:8}0900 "$name"
done

답변2

귀하의 예에서 모든 파일을 가정하면가지다효과적인yyyymmdd날짜, 파일 이름에서 날짜를 추출하여 인용된 명령에 적용할 수 있습니다.

#!/bin/bash
for name in IMG-*-W*.jpg
do
    date="$(echo "$name" | sed -e 's/^IMG-//' -e 's/-W.*//')"
    touch -a -m -t ${date}0900 "$name"
done

일부 문서에 만료 날짜가 없으면 추가 작업이 필요합니다. 하지만 bash에서 정규식을 사용하여 테스트할 수 있습니다.

관련 정보