"ls" 명령의 파일 속성 동등성 정보

"ls" 명령의 파일 속성 동등성 정보

수천 개의 이미지가 들어 있는 폴더가 있습니다. 수천 개의 이미지 중에서 "최종 생성" 및 "최종 수정" 속성이 정확히 동일한 모든 이미지를 함께 묶고 싶습니다. (즉, 이름을 변경하지 않은 모든 이미지를 분리하고 싶습니다)

터미널에서 이 작업을 수행할 수 있는 방법이 있나요?

연결하려는 두 명령은 다음과 같습니다. 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.

관련 정보