내가 당신의 결과는 다음,
"/path/to/photo1.jpg","2017:01:15","22:19:15"
"/path/to/another/photo.JPG","2017:01:15","22:10:01"
처럼 사진에 대한 절대 경로를 볼 예정이다 걸릴 : 이것은 내가 얻을 그 출력 DateTimeOriginal
날짜/시간을 모두 인용 부호로 묶습니다.
exiv2
실제로 파일 인수에 여러 장의 사진을 걸릴 수 있으므로 전체 프로세스는이 명령의 파이프 라인을 단순화 할 수 있습니다
# Need this for the fileglob
shopt -s globstar extglob
exiv2 -pa -g DateTimeOriginal **/*[email protected](jpg|JPG) |
awk -v pwd="$PWD/" -v dq='"' -v OFS=',' '{
fn = substr($0, 1, match($0,/*Exif\.Photo/)-1)
print dq pwd fn dq, dq $(NF-1) dq, dq $NF dq
}'
쉘 옵션 globstar
및 extglob
의 **/*.*@(jpg|JPG)
표현을 가능하게하는 전체 디렉토리 트리에 대해 jpg
또는 JPG
으로 끝나는 모든 파일을 반환합니다.
exiv2
은 DateTimeOriginal
데이터를 포함하는 파일에 대해서만 무엇인가를 반환합니다.
dir1/photo1.jpg Exif.Photo.DateTimeOriginal Ascii 20 2017:01:22 10:20:36
dir1/photo3.jpg Exif.Photo.DateTimeOriginal Ascii 20 2017:01:22 10:20:36
dir with space/photo2.JPG Exif.Photo.DateTimeOriginal Ascii 20 2017:01:22 10:20:38
dir with space/photo4.JPG Exif.Photo.DateTimeOriginal Ascii 20 2017:01:22 10:40:09
photo5.jpg Exif.Photo.DateTimeOriginal Ascii 20 2017:01:24 20:06:38
photo6.JPG Exif.Photo.DateTimeOriginal Ascii 20 2017:01:22 10:00:55
이 AWK와 간단한 것, 공백 경로를 위해 그것을하지 않았다 질문에서 언급 한 바와 같이 : 중간 출력은 다음과 같이 (제거 일부 공백)을 보인다. exiv2
출력 공간 분리 및 탭을 얻을 수있는 옵션이있을 것 같지 않기 때문에 일부 AWK의 속임수가 필요합니다 :
이
- 다음에 슬래시가 현재 디렉토리의 경로,의에 전달 명령은
-v pwd="$PWD/"
입니다.
- 지저분한 탈출을 피하기 위해 큰 따옴표를
-v dq='"'
으로 정의합니다.
- 출력 필드 구분 기호는
-v OFS=','
인 쉼표로 설정됩니다.
- 파일 이름을 얻으려면
Exif.Photo
이 오는 일련의 공백 색인을 검색 한 다음 해당 색인 바로 앞에서 끝나는 부분 문자열을 fn
에 할당합니다.
- 따옴표로 묶어 쉼표로 구분하여 인쇄하려면
dq
변수를 사용하고 파일 이름 앞에 pwd
경로를 추가하고 $(NF-1)
및 $NF
을 사용하여 두 번째 필드와 마지막 필드를 각각 가져옵니다.
결과는 재 > ausgabe.csv
명령에 추가되어야한다,
"/home/benjamin/tinker/space dir/dir1/photo1.jpg","2017:01:22","10:20:36"
"/home/benjamin/tinker/space dir/dir1/photo3.jpg","2017:01:22","10:20:36"
"/home/benjamin/tinker/space dir/dir with space/photo2.JPG","2017:01:22","10:20:38"
"/home/benjamin/tinker/space dir/dir with space/photo4.JPG","2017:01:22","10:40:09"
"/home/benjamin/tinker/space dir/photo5.jpg","2017:01:24","20:06:38"
"/home/benjamin/tinker/space dir/photo6.JPG","2017:01:22","10:00:55"
같은 파일에이를 얻는 것입니다.
명령이 작동하지 않는 이유는 하나의 파일을 예로 들어 보겠습니다. sed 단계 후에, 당신은 './photo5.jpg'
과 같은 것을 가지고 있습니다.이제 을 사용하면 이됩니다. 당신의 EXIF
라인에서
, 당신은 이제 exiv2
이 존재하지 않는 작은 따옴표 –을 포함하여 문자 그대로 '/photo5.jpg'
라는 파일을 찾고, 또 다른 작은 따옴표를 추가합니다.
디버깅 코드를 추가하거나 줄이면 오류 메시지를 생성하는 행을 식별 한 다음 수정합니다. 오류 메시지를 생성 할 수있는 코드의 약 4 ~ 5 줄 밖에 없으므로이 질문을 게시하는 데 많은 시간이 걸립니다. –