source

X시간보다 오래된 파일을 삭제하는 방법

lovecheck 2023. 4. 22. 09:44
반응형

X시간보다 오래된 파일을 삭제하는 방법

오래된 파일을 삭제해야 하는 bash 스크립트를 쓰고 있습니다.

현재는 다음을 사용하여 구현되어 있습니다.

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete

그러면 1일보다 오래된 파일이 삭제됩니다.

단, 어느 날, 예를 들어 6시간 정도 전에 해상도를 높이고 싶다면 어떻게 해야 합니다.find와 mtime을 사용하는 것처럼 깔끔한 방법이 있을까요?

에는 다음 기능이 있습니까?-mmin옵션?이를 통해 마지막 수정 이후의 시간(분)을 테스트할 수 있습니다.

find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete

아니면 같은 일을 하는 데 사용할 수도 있습니다.phjr도 댓글로 추천을 해줬어요.

이것은 나에게 효과가 있었던 접근법입니다(상기에서는 사용되고 있지 않습니다).

$ find /path/to/the/folder -name '*.*' -mmin +59 -delete > /dev/null

폴더는 그대로 두고 59분보다 오래된 파일을 모두 삭제합니다.

이 방법을 사용할 수 있습니다. 1시간 전에 파일을 만들고-newer file논쟁.

(또는 사용)touch -t이러한 파일을 작성한다).

SunOS 5.10의 경우

 Example 6 Selecting a File Using 24-hour Mode


 The descriptions of -atime, -ctime, and -mtime use the  ter-
 minology n ``24-hour periods''. For example, a file accessed
 at 23:59 is selected by:


   example% find . -atime -1 -print




 at 00:01 the next day (less than 24 hours  later,  not  more
 than one day ago). The midnight boundary between days has no
 effect on the 24-hour calculation.

사용 중인 버전의 "find"에 "-mmin"이 없는 경우 "-mtime -0.041667"은 "최근 1시간 이내"에 매우 가깝기 때문에 다음과 같이 사용합니다.

-mtime +(X * 0.041667)

X가 6시간을 의미한다면,

find . -mtime +0.25 -ls

24시간*0.25=6시간이기 때문에 동작합니다.

만약 어떤 사람이find가지고 있지 않다-mmin그리고 만약 어떤 사람이 다른 사람과find의 정수값만 받아들입니다.-mtime「보다 작지 않다」가 「새로운 것은 아니다」와 비슷하다고 생각되면, 반드시 모든 것이 없어지는 것은 아닙니다.

컷오프 시간이 m인 파일을 만들 수 있다면,find참조 파일보다 최신이 아닌 파일을 찾습니다.

올바른 타임스탬프를 가진 파일을 작성하려면 시스템에 적절한 타임스탬프가 없기 때문에 다소 작업이 필요합니다.find아마 능력 미달일 겁니다date명령어는 다음과 같은 작업을 수행할 수 있습니다.date +%Y%m%d%H%M%S -d "6 hours ago".

다행히 다른 오래된 툴로 이를 관리할 수 있습니다. 비록 더 다루기 힘든 방식이지만요.

6시간이 지난 파일을 삭제하는 방법을 찾으려면 먼저 6시간 전의 시간을 찾아야 합니다.6시간은 21600초라고 생각해 주세요.

$ date && perl -e '@d=localtime time()-21600; \
  printf "%4d%02d%02d%02d%02d.%02d\n", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'
> Thu Apr 16 04:50:57 CDT 2020
202004152250.57

그 이후로는perlstatement는 필요한 날짜/시간 정보를 생성합니다.이 정보를 사용하여 정확히 6시간 전의 참조 파일을 만듭니다.

$ date && touch -t `perl -e '@d=localtime time()-21600; \
  printf "%4d%02d%02d%02d%02d.%02d\n", \
  $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'` ref_file && ls -l ref_file
Thu Apr 16 04:53:54 CDT 2020
-rw-rw-rw-   1 root     sys            0 Apr 15 22:53 ref_file

이제 정확히 6시간 전의 레퍼런스 파일이 있으므로 "6시간보다 오래된 모든 파일 삭제"를 위한 "구 UNIX" 솔루션은 다음과 같은 것이 됩니다.

$ find . -type f ! -newer ref_file -a ! -name ref_file -exec rm -f "{}" \;

레퍼런스 파일을 정리하는 것도 좋을 것 같아요

$ rm -f ref_file

mmin은 분 단위입니다.

man 페이지를 보세요.

man find

를 참조해 주세요.

@iconoclast가 다른 답변의 코멘트에서 궁금해했던 길을 가기 위해 할 수 있는 일은 다음과 같다.

을, 에게는 crontab을 사용합니다./etc/crontab/tmp/hour:

# m h dom mon dow user  command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1

이 명령을 실행하려면 다음을 사용합니다.

find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;

언급URL : https://stackoverflow.com/questions/249578/how-to-delete-files-older-than-x-hours

반응형