수천 개의 이미지가 들어 있는 폴더가 있습니다. 수천 개의 이미지 중에서 "최종 생성" 및 "최종 수정" 속성이 정확히 동일한 모든 이미지를 함께 묶고 싶습니다. (즉, 이름을 변경하지 않은 모든 이미지를 분리하고 싶습니다)
터미널에서 이 작업을 수행할 수 있는 방법이 있나요?
연결하려는 두 명령은 다음과 같습니다. LS-TU생성 날짜별로 파일을 나열합니다. (저는 맥을 사용하고 있습니다) ls-lt수정 날짜별로 파일 나열
그렇게 생각해요 "생성일 = 수정일인 목록 파일"
답변1
이 stat
명령을 사용하여 이를 수행할 수 있습니다. 다음은 파일 이름을 인쇄하고 공백을 포함할 수 있는 간단한 스크립트입니다.
#!/bin/sh
find $* -exec stat -f '%m %B %N' {} \; | \
awk '$1 == $2 { \
s=length($1)+length($2)+3;
$0 = substr($0,s);
print $0;
}'
그리고 %m
각각%B
수정됨그리고태어나다번(이것이 요청된 것 같습니다). 스크립트는 이러한 숫자를 십진수로 인쇄하고 awk
해당 숫자를 전달한 다음 해당 숫자가 동일한 행만 인쇄합니다. 파일 이름에 공백이 포함될 수 있으므로 나머지 스크립트는 입력에서 타임스탬프 값을 제거하고 줄의 나머지 부분을 인쇄합니다.
추가 자료:
답변2
나는 그것이 지루하다고 느꼈고 이런 스크립트도 사용하기 때문에 Thomas Dickey의 스크립트를 과감한 방법이 아닌 작은 방법으로 변경했지만 예를 들어 모든 종류의 파일 이름(파일 이름에 줄 바꿈이 있는 파일도 포함)을 처리할 수 있도록 했습니다. ) 파일 이름 사이의 구분 기호를 쉽게 변경할 수 있습니다(예: 로 전달 ORS
하도록 설정하기만 하면 됩니다 )."\0"
xargs -z …
#!/bin/sh
find "${1-.}" -type f -exec stat --printf '%n\0%Y %W\0' -- {} \; | \
awk 'BEGIN {
RS = "\0";
FS = " ";
ORS = "\n";
} {
if (NR % 2) {
f = $0;
} else if ($1 == $2) {
print f;
}
}'
예를 들어 --printf
.