심볼릭 링크 경로에서 작동하지 않는 것을 찾으셨나요?

심볼릭 링크 경로에서 작동하지 않는 것을 찾으셨나요?

이 명령을 실행하면 find $HOME/MySymlinkedPath -name "run*.sh"아무 일도 일어나지 않으며 오류도 나타나지 않습니다("MySymlinkedPath"는 $HOME이 아닌 다른 하드 드라이브에 대한 기호 링크 경로입니다).

이것들도 실패합니다:

find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"

확실히 하기 위해 이 존재하지 않는 경로는 실패하므로(물론) find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"경로가 발견되지만(오류가 발생하지 않기 때문에) find해당 경로에 대한 검색이 수행되지 않으므로 지금은 잘 모르겠습니다.

cd $HOME/MySymlinkedPath이와 같이 경로 참조를 먼저 제거하는 경우에만 작동 find -name "run*.sh"하지만 내 스크립트에는 좋지 않습니다.

추가 정보:
이 명령은 평소와 같이 작동합니다 ls $HOME/MySymlinkedPath/run*.sh. 거기로 가서 cd $HOME/MySymlinkedPath실행 하면 ls ..결과는 예상한 것과 다릅니다. 즉, 심볼릭 링크 경로가 있는 경로 목록입니다. 다른 미디어/하드 드라이브의 실제 경로 목록을 반환합니다! ! !

pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath

재고:
이것이 및 시스템의 문제입니까 find, ls아니면 내 시스템의 문제입니까? 아니면 이것이 예상된 것이며 전혀 문제가 되지 않습니까? 우분투 12.10을 사용하고 있습니다. 내가 테스트한 모든 터미널에서 실패하므로 터미널 "문제"는 아닌 것 같습니다.

답변1

여기그것이 답입니다. 그러나 이 질문은 bash가 질문의 대상임을 지적합니다.

설명이 find발견되었습니다 "$HOME/MySymlinkedPath". 디렉터리가 아니라 심볼릭 링크이므로 재귀적 하강은 거기서 끝납니다. 표현식이 일치하면 "$HOME/MySymlinkedPath"(예: 에서 find "$HOME/MySymlinkedPath" -name 'My*') find일치 항목으로 인쇄됩니다.

거기에서 지적했듯이, 이 문제를 처리하고 모든 스크립트를 수정하는 가장 쉽고 깨끗한 방법은 다음과 같습니다.

find "$HOME/MySymlinkedPath" -name "run*.sh"

find심볼릭 링크에서 시작하지 않고 심볼릭 링크의 대상에서 시작 하도록 슬래시를 추가하기만 하면 됩니다 .

find "$HOME/MySymlinkedPath/" -name "run*.sh"

또는 -H옵션을 전달하여 find(경로 앞에 먼저 나타나야 함) 명령줄에 전달된 심볼릭 링크를 통과하도록 지시합니다. (이것은 재귀 하강 중에 발생하는 심볼릭 링크를 통과하라는 -L지시 와 다릅니다 .)find

find -H "$HOME/MySymlinkedPath" -name "run*.sh"

결국 여기에서 가장 잘 작동했습니다 -L(폴더 심볼릭 링크를 통해 심볼릭 링크된 여러 파일 시스템이 있었기 때문에). 그러나 문제 없이 많은 오류 메시지가 생성되었으므로 2>/dev/null다음 별칭을 추가하기로 결정했습니다 alias find='find -L'.

find -L "$HOME/MySymlinkedPath" -name "run*.sh" 2>/dev/null

관련 정보