다른 파일 시스템에 대한 심볼릭 링크를 제외하려면 find -mount를 사용하세요.

다른 파일 시스템에 대한 심볼릭 링크를 제외하려면 find -mount를 사용하세요.

나는 무엇보다도 보관을 위해 디렉터리(파일 및 하위 디렉터리)의 모든 항목 목록을 추출하는 스크립트를 작성하고 있지만 원격 심볼릭 링크(예: 다른 파일 시스템)를 건너뛰어야 합니다. 스크립트는 find . -mount다른 파일 시스템에 대한 심볼릭 링크를 제외하는 것으로 보이는 Solaris에서 마이그레이션되었습니다.

-mount다음과 같은 매뉴얼 페이지를 찾으십시오 .

-mount Don't  descend directories on other filesystems.  An alternate name for -xdev, for compatibility with some other versions of find.

나는 그것을 시도했지만 -xdev그것도 작동하지 않았습니다.

차이점으로 인해 원격 심볼릭 링크가 삭제되었습니다.

원격 심볼릭 링크 반환을 제거하기 위해 이 문제를 한 줄로 수정하는 방법을 아시나요?

답변1

솔라리스의 행동에는 결함이 있습니다. -mount이는 -xdev부팅 파일 시스템 외부를 가리키는 심볼릭 링크를 제외해야 한다는 의미는 아닙니다. 이 동작은솔라리스 문서, 다른 구현에서는 이를 수행하지 않습니다. 즉 -xdev, find재귀 디렉터리 탐색이 특정 마운트 지점에 도달하면 해당 마운트 지점을 완전히 건너뜁니다.

find나는 심볼릭 링크 대상을 포함하는 장치 별로 일치 항목을 필터링하는 쉬운 방법이 없다고 생각합니다 . 이는 종속성입니다.statLinux의 유틸리티(Solaris에서는 작동하지 않음)

find /some/path -xdev \( ! -type l -o -exec sh -c '[ "$0" = "$(stat -L -fc %t "$1")" ]' "$(stat -fc %t /some/path)" {} \; \) -print

즉, 심볼릭 링크가 아닌 모든 것을 인쇄하고, 심볼릭 링크의 경우 대상의 파일 시스템 번호가 시작 지점의 파일 시스템 번호와 일치하는 경우에만 인쇄합니다. 매달려 있는 심볼릭 링크는 제외되고 오류 메시지가 표시됩니다. 이를 포함하려면 -o -xtype l뒤에 추가하고 자동으로 제외하려면 뒤에 추가하세요.! -type l-xtype l -o-xdev

관련 정보