Mac의 iPhoto에서 사진을 내보냈습니다. 디렉터리 이름은 로컬 이름 지정 날짜("Day.MONTH YYYY")를 따라 지정됩니다.
8. Mai 2013/
13. Juli 2013/
31. Oktober 2014/
그 중 일부는 GPS 데이터와 함께 제공됩니다.
Capdepera, 2. Juli 2013/
Stuttgart, 13. Februar 2013/
Marsa Alam, 31. Dezember 2011/
YYYY-MM-DD<.GPS-Data-if-exists> = 2013-07-02.Capdepera와 같은 디렉터리 이름을 원합니다.
cut -d',' -f1
GPS 데이터와 -f2
날짜 부분을 ($DatePart로) 분리 하겠습니다 . 두 번째 단계에서는 점 "."을 사용하여 날짜 부분을 일과 월 + 연도로 나눈 다음 마지막 4자리를 연도로 사용합니다. 그 후에는 내가 얻을 것이다
GPS="Capdepera"
DAY=02 # fill leading zero is no issue.
MONTH=Juli
YEAR=2013
이제 월을 숫자에 매핑하기 위해 다음과 같은 배열을 만듭니다.
Monate="
Januar=01\n
Februar=02\n
Juli=07\n
"
그 결과 echo -e $Monate | grep $MONTH| cut -d'=' -f2
07이 나왔습니다. 이제 모든 항목을 최종 디렉터리 이름에 연결하여 이름을 바꿀 수 있습니다.
이제 내 질문은: 위에서 설명한 것과 같은 더 쉬운 방법이 있습니까? 즉 -f2
, SQL 함수 Convert()와 같은 날짜 변환은 첫 번째 단계에서 날짜 부분을 사용한 후 단계적으로 분할 및 배열 없이 결과를 제공합니다.
Convert("$DatePart", +%Y-%m-%d) => 2013-07-02
고마워요, 세랄
답변1
적절한 최신 버전의 Perl이 있는 경우 Perl 기반 rename
유틸리티를 사용합니다(특히 이전 버전은 영어가 아닌 월 및 요일 이름을 구문 분석할 수 있는 방법을 Time::Piece
제공하지 않습니다 ).use_locale
$ LC_TIME=de_DE.UTF-8 rename -n -- '
BEGIN{use Time::Piece; Time::Piece->use_locale()};
s/(.*?), (\d+\. \w+ \d+)/Time::Piece->strptime($2,"%d. %B %Y")->strftime("%Y-%m-%d.$1")/e
' *,\ */
rename(Capdepera, 2. Juli 2013/, 2013-07-02.Capdepera/)
rename(Marsa Alam, 31. Dezember 2011/, 2011-12-31.Marsa Alam/)
rename(Stuttgart, 13. Februar 2013/, 2013-02-13.Stuttgart/)
LC_TIME=de_DE.UTF-8
해당 로캘에서 이미 독일어 날짜/시간을 사용하는 경우 이 할당을 생략할 수 있습니다. GPS 데이터 문자열이 없는 더 간단한 경우는 연습문제로 남겨둡니다.