답변:
당신이 있습니까 find
이 -mmin
옵션을? 최종 수정 이후의 분 수를 테스트 할 수 있습니다.
find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete
또는 tmpwatch
동일한 작업을 수행하기 위해 사용 을 살펴보십시오 . tmpreaper
의견에서 phjr도 추천 했다.
$LOCATION
하고 $REQUIRED_FILES
모두 같은 여러 값을 가질 수 dir1 dir2
와 *.txt *.tmp
?
이 트릭을 할 수 있습니다 : 1 시간 전에 파일을 만들고 -newer file
인수를 사용하십시오 .
(또는 touch -t
그러한 파일을 만드는 데 사용 하십시오).
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
파일 test
을 만듭니다 .
여기 나를 위해 일한 접근법이 있습니다 (그리고 위에서 사용 된 것을 보지 못했습니다)
$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null
폴더를 그대로 유지하면서 59 분보다 오래된 모든 파일을 삭제합니다.
'*.*'
또는 셸을 사용 find
하면 해결하기 위해 와일드 카드로 유지하지 않고 실제 파일 이름으로 확장 할 수 있습니다. find
하위 디렉토리에서의 재귀 작업 이 중단 됩니다.
-name '*.*'
확장자가없는 파일 (예 : README
, 등)은 삭제하지 않습니다 Makefile
.
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 시간이므로 작동
@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 {} \;
*/1
crontab에서 시간당 중복됩니다. 시간 필드에 *를 넣는 것과 같습니다.
하나의는 경우 find
가없는 -mmin
한도에 붙어있는 경우 find
에만 값 정수 받아 그 -mtime
, 모든 필요 하나가 "이전의"가 "보다 새로운"과 유사하다고 판단하는 경우 손실되지 않습니다.
컷오프 시간이 mtime 인 파일을 작성할 수있는 경우 find
참조 파일보다 최신이 아닌 파일을 찾 도록 요청할 수 있습니다 .
적절한 타임 스탬프가있는 파일을 만드는 것은 다소 복잡하기 때문에 시스템이 적절하지 않은 시스템 find
에는 다음 date
과 같은 작업을 수행 할 수있는 명령 보다 적을 수도 있습니다 date +%Y%m%d%H%M%S -d "6 hours ago"
.
다행스럽게도이를 관리 할 수있는 다른 오래된 도구는 다루기가 쉽지 않습니다.
6 시간은 21600 초입니다. 6 시간 전의 시간을 유용한 형식으로 찾고 싶습니다.
$ 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
펄 문장은 유용한 날짜를 만들어 냈지만 더 잘 사용해야합니다.
$ 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
이 오래된 유닉스에 대한 해결책은 다음과 같습니다.
$ find . -type f ! -newer ref_file -a ! -name ref_file -exec rm -f "{}" \;
참조 파일을 정리하는 것이 좋습니다.
$ rm -f ref_file