저는 macOS 환경을 사용하고 있습니다.
이름이 다음 형식으로 시작하는 여러 파일의 타임스탬프를 변경하고 싶습니다.
XXXXX_DD_MM_YYYY_HH-MM-SS_
다음은 파일 이름의 예입니다.
CALLU_16-10-2018_10-58-26_p123456789012.mp3
생성 및 수정 날짜는 2018-10-16 10:58:26으로 변경되어야 합니다.
다음과 같은 형식의 스크립트가 있습니다 Call@1234567890(1234567890)_20160624205913
. 파일 이름 끝부분에서 날짜와 시간을 다음 매개변수로 추출합니다 touch -t STAMP
.
for f in *; do
t="$(awk '/_.*/ { match($0, /_.*/)
print substr($0, RSTART + 1, RLENGTH - 7)
}'<<<"$f" )"
touch -t "$t" "$f" 2>/dev/null
done
답변1
오래된 질문
이전 스크립트는 파일 이름의 첫 번째 문자를 awk
검색한 다음 다음 문자( )부터 끝 앞의 6자( : +1-7 = -6)까지 모든 항목을 사용했습니다._
RSTART+1
RLENGTH-7
입력 파일 이름에 따라 20160624
ie가 생성됩니다. 날짜만 있고 시간은 없습니다. ~에서touch
사양:
옵션 인수는 다음 형식의 10진수여야 합니다.
[[CC]YY]MMDDhhmm[.SS]
각 두 자리 숫자는 다음을 나타냅니다.
MM The month of the year [01,12]. DD The day of the month [01,31]. hh The hour of the day [00,23]. mm The minute of the hour [00,59]. CC The first two digits of the year (the century). YY The second two digits of the year. SS The second of the minute [00,60].
...8자리 숫자만으로 "20"이 월로 해석된다는 의미입니다. 잘못된 날짜. 하지만 당신은 그렇게 하지 않을 거예요 . touch
왜냐하면 …2>/dev/null
hh
예를 들어 를 사용하여 및 를 제공하려면 4개의 문자를 더 추가해야 합니다 mm
. RLENGTH-3
. 그러나 이는 이전 파일 이름에만 적용됩니다.
새로운 질문
파일 이름에서 CALLU_16-10-2018_10-58-26_p123456789012.mp3
날짜 16-10-2018
는 리틀 엔디안 순서(DD-MM-CCYY)이므로 awk
스크립트는 구성 요소를 교체하고 구분 기호를 제거해야 합니다.
awk -F '[-_]' '{print $4$3$2$5$6"."$7}'
(입력 파일 이름에 -
날짜 이전에 다른 문자가 포함되어 있는 경우 s first 사이의 부분을 추출하기 위해 추가 단계를 수행해야 합니다 _
.)
샘플 파일을 사용하여 이를 테스트합니다.
$ echo 'CALLU_16-10-2018_10-58-26_p123456789012.mp3' | awk -F '[-_]' '{print $4$3$2$5$6"."$7}'
201810161058.26
따라서 업데이트된 스크립트는 다음과 같습니다.
for f in *.mp3; do
t=$(echo "$f" | awk -F '[-_]' '{print $4$3$2$5$6"."$7}')
touch -t "$t" "$f"
done