이 명령을 사용하여 find
해결해야 할 일부 기호 링크가 포함된 디렉터리 트리에서 특정 시간(분)보다 오래된 모든 일반 파일을 찾습니다.
find -L . -type f -mmin +300 -print
그러나 이 디렉토리 트리에는 일부 순환 기호 링크가 있으며 이로 인해 find
다음 오류가 발생합니다.
/usr/bin/find: File system loop detected; ‘/storage/tester1/data/webdav’ is part of the same file system loop as ‘/storage/tester1/data’
디렉터리 구조에서 이 루프를 제거할 수 없고 키 사용을 피할 수 없습니다. 그러나 오류를 감지 -L
하기 위한 올바른 종료 코드를 얻으려면 이 오류를 억제해야 합니다 .find
진짜가능한 오류(대신'루프가 감지되었습니다'경고하다).
리디렉션특별한 오류 2>/dev/null
아직 종료 상태가 표시되므로 아무것도 할 수 없습니다.1이 루프로 인해 어떤 검색에서도 아무것도 감지되지 않습니다.진짜내 스크립트에서 검색하는 동안 오류가 발생했습니다.
어떻게 피하고 종료 상태를 얻을 수 있습니까?0심볼릭 링크 루프를 사용하여 디렉토리 트리에서 검색이 성공했나요?
참고: 이 사이트에 "루프 감지됨"에 대한 몇 가지 유사한 질문이 있다는 것을 알고 있지만 다음 심볼릭 링크를 제거하면 모든 질문을 해결할 수 있으므로(내 경우에는 불가능함) 이 질문은 중복되지 않습니다. 닫지 마세요!
답변1
논평할 만큼 평판이 좋지 않습니다.
find의 출력을 가져와서 역방향 일치를 위해 grep을 사용( -v
)하여 "파일 시스템 주기 감지됨"이 포함된 항목을 제외할 수 있습니다.
find / -type d -name bar 2>&1 | grep -v "File system loop detected"
한 가지 예:
cd /usr
find . -type d -name bar 2>&1
./share/locale/bar
찾고 있는 것: './share/polkit-1/rules.d': 권한이 거부되었습니다.
echo $?
1
find . -type d -name bar 2>&1 | grep -v "Permission denied"
./share/locale/bar
echo $?
0