'find' 명령에서 특정 오류 메시지를 억제하는 방법은 무엇입니까?

'find' 명령에서 특정 오류 메시지를 억제하는 방법은 무엇입니까?

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/하고 임의의 로그 파일을 관리할 수 있습니다. 이 접근 방식을 고려하십시오.

관련 정보