다음 형식의 파일 이름을 가진 사진으로 가득 찬 디렉토리가 있습니다
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에서 정규식을 사용하여 테스트할 수 있습니다.