나는 가지고있다
link -> file
그래요
find -L . -name 'link'
그리고 얻다
./link
왜 그런 겁니까?
그 사람은 다음과 같은 사실을 발견했습니다.
-L : 기호 링크를 따릅니다. find가 파일에 대한 정보를 확인하거나 인쇄할 때 사용되는 정보는 링크 자체가 아니라 링크가 가리키는 파일의 속성에서 얻어야 합니다(깨진 심볼릭 링크이거나 find가 링크가 가리키는 파일을 확인할 수 없는 경우 제외). ) .
답변1
일반적인 규칙은 명령이 링크(즉, 디렉토리 항목, inode에 대한 포인터)에서 작동하는 경우 해당 명령은 기호 링크를 링크가 가리키는 객체가 아니라 그 자체로 취급한다는 것입니다. 그렇지 않으면 명령은 기호 링크가 가리키는 대상에서 작동합니다. 따라서 cp
기본적으로 심볼릭 링크를 따르며 링크가 가리키는 파일의 내용이 복사됩니다. 그러나 cp
를 지정하여 처리할 디렉터리 항목을 요청하면 -R
심볼릭 링크 따라가기가 중지됩니다. mv
항상 디렉토리 항목과 함께 작동하므로 심볼릭 링크를 따르지 않습니다.
이 find
명령의 일반적인 활동은 디렉토리 항목에 대해 작동하는 것이므로 기본적으로 기호 링크를 따르지 않습니다. 모든 속성에 대한 심볼릭 링크를 추적하는 -L
이유 추가find
와는 별개로디렉토리 검색을 할 때 빼놓을 수 없는 것 중 하나가 바로 이름이다. 의 목적 중 하나는 디렉토리 항목에서 작동하는 및 같은 명령에 대한 입력을 제공하는 find -name
것입니다 . 생성된 이름이 루트로 추정되는 디렉터리 트리 외부를 가리키는 경우 불쾌하고 놀라운 결과가 발생합니다 .mv
rm
find -L dir -name
dir
답변2
-L
확인하는 데 사용하세요특성링크의 콘텐츠나 메타데이터가 아닌 파일의 콘텐츠나 메타데이터입니다. 예를 들어 다음을 사용하면 링크가 아닌 파일을 -atime
확인합니다 .atime
$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$
testdir/link
이후에 생성되었지만 testdir/ref
가리키는 파일은 그렇지 않습니다.