이 명령을 실행하면 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