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
그 이후로는perl
statement는 필요한 날짜/시간 정보를 생성합니다.이 정보를 사용하여 정확히 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
'source' 카테고리의 다른 글
문자열에서 숫자만 가져오기 위한 쿼리 (0) | 2023.04.22 |
---|---|
Python - 각 목록의 네 번째 요소별로 목록을 정렬하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
T-SQL에서의 PRINT 문 (0) | 2023.04.22 |
Azure 함수에서 설정 읽기 (0) | 2023.04.22 |
WPF의 디자인 타임 전용 배경색? (0) | 2023.04.22 |