![2014년보다 오래된 파일을 찾아 삭제하는 스크립트](https://linux55.com/image/196087/2014%EB%85%84%EB%B3%B4%EB%8B%A4%20%EC%98%A4%EB%9E%98%EB%90%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%95%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
2014년 9월 24일 이전의 파일을 찾아 삭제하는 스크립트를 작성하려고 합니다. 어떻게 해야 합니까?
답변1
2014년 9월 24일 00:00h로 설정된 시간으로 더미 파일을 만든 다음 업데이트되지 않은 콘텐츠를 찾아 삭제합니다.
#date format YYYYMMDDhhmm
touch -t 201409240000 dateref
find -type f ! -newer dateref -delete
find
이 옵션을 사용하기 전에 이 옵션을 숙지하시기 바랍니다 -delete
. 마지막 위치에 있어야 하며 결과를 미리 확인할 필요가 없을 수도 있습니다 -delete
.
답변2
(해당 날짜가 포함된 참조 파일)과 함께 find
s 옵션을 사용하여 -newer를 무효화할 수 있습니다 . 이를 사용하여 참조 파일을 만들 수 있습니다. 예를 들어:-newer
!
touch -d
touch -d "2014-09-23 23:59:59.999999999" /tmp/reference-file
find /path/to/directory/ ! -newer /tmp/reference-file -ls
less
검사를 위해 파일로 파이프하거나 리디렉션 할 수 있습니다 .
삭제하려는 파일만 삭제된다는 것을 확인한 후 옵션을 -ls
로 변경하세요.-delete
(2014년 9월 14일 자정에 생성된 파일을 삭제해도 괜찮다면 이 방법이 효과적입니다. touch -d 2014-09-24
이는 ! -newer
"이전"을 의미할 뿐만 아니라 "이전 또는 같음"을 의미하기 때문입니다. 대부분의 경우 .999999999가 사용된다고 말합니다. 아마도 "충분히 좋다")
참고: 위의 내용에서는 및 가 모두 GNU find
버전 이라고 가정합니다 touch
. 다른 버전에서는 작동할 수도 있고 작동하지 않을 수도 있습니다. Linux를 사용하는 경우 GNU 유틸리티가 표준입니다( busybox
공간을 절약하기 위해 작은 배포판이나 유사한 배포판을 사용하지 않는 한).
에서 man find
:
-newer reference
현재 파일의 마지막 데이터 수정 시간은 참조 파일의 마지막 데이터 수정 시간보다 최근입니다. 참조가 기호 링크이고
-H
옵션 또는-L
옵션이 유효한 경우 참조가 가리키는 파일의 마지막 데이터 수정 시간이 항상 사용됩니다.
-anewer
수정 시간 대신 액세스 시간을 사용하려면 동일한 매뉴얼 페이지도 참조하세요.
다음 -newerXY
옵션도 관련이 있습니다.
- 최신 XY 참조
고려 중인 파일의 타임스탬프 X가 파일에서 참조하는 타임스탬프 Y보다 새로운 경우 성공합니다. 문자 X와 Y는 다음 중 하나일 수 있습니다.
a The access time of the file reference B The birth time of the file reference c The inode status change time of reference m The modification time of the file reference t reference is interpreted directly as a time
일부 조합은 유효하지 않습니다. 예를 들어 to
X
be는 유효하지 않습니다t
. 일부 조합은 모든 시스템에서 구현되지 않습니다. 예를 들어B
모든 시스템이 이를 지원하는 것은 아닙니다. 유효하지 않거나 지원되지 않는 조합을 지정하면XY
치명적인 오류가 발생합니다.
-d
시간 사양은 GNU 옵션에 대한 인수 로 해석됩니다date
.참조 파일의 생성 시간을 사용하려고 시도했지만 생성 시간을 확인할 수 없는 경우 치명적인 오류 메시지가 나타납니다.
검사 중인 파일의 빌드 시간과 관련된 테스트를 지정하면 빌드 시간을 알 수 없는 모든 파일에 대해 이 테스트가 실패합니다.
답변3
다음 스크립트를 사용해 보세요.
#!/bin/bash
d2=$(date +%s)
d1=$(date -d "2014-09-24" +%s)
d=$(( (d2 - d1) / 86400 ))
find ./ -mtime +$d -delete
먼저 -delete
올바른 파일을 찾았는지 확인해 보세요. 100% 확실할 때 추가 하고 조회 -delete
대신 원하는 경로를 사용하세요 ../