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