find 표현식을 어떻게 작성합니까 (atime = ctime) (액세스 시간 = 변경 시간)

find 표현식을 어떻게 작성합니까 (atime = ctime) (액세스 시간 = 변경 시간)

마지막 inode 변경 이후 액세스되지 않은 제거할 파일 세트를 찾고 싶습니다. 현재 있는 디렉터리로 이동되었을 때 마지막 활동이 발생한 파일입니다.

여기서는 찾기 테스트를 위한 참조 파일로 각 파일을 전달하려고 합니다.

man find 
...
-newerXY reference
          Compares  the timestamp of the current file with reference.   
...    

이것이 내가 지금까지 시도한 것이지만 작동하지 않습니다.

find . -type f | xargs -I{} find -newerac {} -printf "%p\tinode: %i\naccess: \t%a\nchange: \t%c\n"

답변1

그러면 atime과 ctime이 다른 모든 파일이 제공됩니다.

find . -type f -printf "%p\n%a\n%c\n\n" | \
  awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'

다음 예를 참조하세요.

ls -1
data
data1
ss.08-02-2012-01.22.16-PM.png
ss.09-02-2012-13.42.06-PM.png
test.awk
test.py
test.sh

이제 파일 통계를 살펴보십시오.

find . -type f -printf "%p\n%a\n%c\n\n"
./test.sh
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./data1
Tue Aug 21 15:13:13.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./test.awk
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./data
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./test.py
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./ss.09-02-2012-13.42.06-PM.png
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

./ss.08-02-2012-01.22.16-PM.png
Tue Aug 21 15:12:29.0000000000 2012
Tue Aug 21 15:12:29.0000000000 2012

awk를 사용한 후속 처리를 쉽게 하기 위해 각 필드를 줄 바꿈으로, 각 레코드를 빈 줄로 구분합니다. awk 'BEGIN {FS="\n"; RS=""}; $2!=$3 {print $1}'
여기서 필드 구분 기호와 레코드 구분 기호는 처음에 설정됩니다(RS는 빈 문자열을 빈 줄로 해석합니다). 이는 $2와 $3가 atime과 ctime을 보유한다는 의미입니다. 서로 다른 경우 해당 파일 이름($1)이 인쇄됩니다.

결과는 다음과 같습니다.

./data1

관련 정보