find /var/log/myfile.*.txt -type f
해당 패턴과 일치하는 파일이 없으면 No such file or directory
.
질문: 이 오류 메시지만 방지하려면 어떻게 해야 합니까? 물론 2>/dev/null
끝에 를 추가할 수도 있지만 이렇게 하면 오류가 억제됩니다. 언급된 것을 어떻게 무시할 수 있습니까?
일부 파일을 주기적으로 삭제하고 파일이 없으면 항상 오류를 기록하는 cronjob이 있기 때문입니다.
@daily find /var/log/myfile.*.txt -mtime +7 -delete
답변1
이 경우 올바른 것은 이 메시지를 전혀 트리거하지 않는 것입니다.
이것을 쉘에서 실행하면
find /var/log/myfile.*.txt -type f
/var/log/myfile.*.txt
쉘에 의해 확장됩니다. 일치하는 항목이 없으면 find
확장된 객체 또는 리터럴을 가져옵니다 . /var/log/myfile.*.txt
후자의 경우가 트리거됩니다 No such file or directory
.
먼저 더미 파일을 생성할 수 있습니다: touch '/var/log/myfile.dummy_name.txt'
(비교카이로의 코끼리). 하지만 이 "솔루션"은 실제로 우아하지는 않습니다.
더 나은 해결책은 find
패턴을 처리하는 것입니다.
find /var/log/ -type f -name "myfile.*.txt"
여기서 큰따옴표는 쉘에서 글로빙을 방지합니다(비교이것). 이 경우에는 그러한 패턴을 지원 하므로 자체적 *
으로 처리됩니다 .find
-name
그러나 위의 접근 방식은 다음 myfile.*.txt
과 일치할 수 있습니다.모든 하위 디렉터리뿐만 /var/log/
아니라. 귀하가 find
지원하는 경우 -maxdepth
다음을 사용하십시오.
find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"
그렇지 않은 경우 다음을 참조하세요.POSIX 찾기를 특정 깊이로 제한하시겠습니까?
귀하의 OS는 이미 logrotate(8)
로그 파일을 관리하는 데 사용하고 있을 것입니다.
내 데비안에서는 logrotate
다음 때문에 매일 실행됩니다 /etc/cron.daily/logrotate
. 우분투에서도 비슷할 것입니다. 이런 방식 으로 사용자 정의 구성을 생성 /etc/logrotate.d/
하고 임의의 로그 파일을 관리할 수 있습니다. 이 접근 방식을 고려하십시오.