초 단위로 시간을 설정(찾기)하는 방법은 무엇입니까?

초 단위로 시간을 설정(찾기)하는 방법은 무엇입니까?

-atime밀리초, 초 또는 분을 설정하는 방법은 무엇입니까 ? 기본값은 일수입니다.

-a시간 n
파일은 n*24시간 전에 마지막으로 액세스되었습니다. find가 24시간 전에 파일에 마지막으로 액세스한 기간을 계산할 때 모든 소수 부분은 무시됩니다. 따라서 -atime +1을 일치시키려면 파일에 적어도 2일 전에 액세스했어야 합니다.

매시간 cron 작업을 실행하여 특정 디렉터리의 파일이 해당 시간 내에 액세스되었는지 확인하고 싶습니다. 시간을 소수점 이하 자릿수로 입력하면 작동하지 않는 것 같습니다.

find . -atime 0.042 -print

하지만 더 나은 해결책이 있을 수도 있습니다. 또 다른 명령이 있을까요? 아니면 마지막으로 수정된 파일을 찾기 위해 이 작업을 수행할 수 없을 수도 있습니다.엑스분을 사용하면 -mmin시간을 분 단위로 설정할 수 있습니다. 어쩌면 그러한 액세스 시간 옵션이 없다는 것은 정보가 다르게 저장된다는 의미일까요?

우분투 16.04를 사용하고 있습니다.

답변1

GNU find를 사용 하면 추측할 수 있듯이 "파일이 n분 전에 마지막으로 액세스되었습니다" -amin대신 사용할 수 있습니다 .-atime

즉, 대부분의 최신 시스템은 relatime실제 파일을 업데이트하여 쓰기 시 메타데이터만 저장하는 파일 시스템 옵션을 기본으로 설정하고 있다는 점에 유의하세요.수정됨마지막 방문 이후였거나 임계값을 초과한 경우(보통 24시간)입니다.

따라서 해당 파일 시스템의 설정을 변경하거나 다른 방법을 찾아보는 것이 좋습니다.포함자체 데몬을 작성할 필요 없이 파일 시스템 활동을 트리거하도록 스크립트를 설정하는 편리한 방법입니다.

답변2

이렇게 하면 -mtime <timespec>시스템이 <timespec>해당 시점에 파일의 수명을 확인하기 시작합니다.find

find매우 작은 디렉터리 트리에서 이를 실행하지 않는 한 디렉터리 트리를 크롤링하고 각 파일에 대해 작업을 수행하는 데 몇 초 또는 몇 시간은 아니더라도 밀리초가 걸립니다 . lstat()따라서 1초 미만의 정확도가 반드시 큰 의미를 갖는 것은 아닙니다.

또한 모든 파일 시스템이 1초 미만의 세분화된 타임스탬프를 지원하는 것은 아닙니다.

하지만 몇 가지 옵션이 있습니다.

find많은 BSD 및 BSD 중 하나를 사용하여 schily-tools다음을 수행할 수 있습니다.

find . -atime -1s

find시작 시점과 비교하여 1초 이내에 마지막으로 액세스한 파일을 찾습니다 .

그리고 zsh:

ls -ld -- **/*(Dms-1)

1초 미만의 세분화를 위해 GNU 도구를 사용하면 atime이 다음으로 설정된 참조 파일을 사용할 수 있습니다 touch.

touch -ad '0.5 seconds ago' ../reference
find . -anewer ../reference

또는 최신 버전을 사용하세요 perl.

perl -MTime::HiRes=lstat,clock_gettime -MFile::Find -le '
  $start =  clock_gettime(CLOCK_REALTIME) - 0.5;
  find(
    sub {
      my @s = lstat $_;
      print $File::Find::name if @s and $s[8] > $start
    }, ".")'

관련 정보