심볼릭 링크 이름이 아닌 심볼릭 링크 대상 이름을 통해 필터링하여 파일 목록을 가져온 다음 해당 목록으로 무언가를 수행하는 방법은 무엇 입니까? 예를 들어 다음 목록에서 처음 네 파일에만 관심이 있습니다 (target contains bar
).
foo -> /tmp/bar
bar -> /home/me/bartoo
baz -> /home/me/public/barthree
zoo -> /usr/share/bar
moo -> /tmp/foo
roc -> /tmp/roc
답변
find를 사용하여 symlink 유형의 모든 파일을 가져오고 -ilname
링크 대상 이름으로 검색 하는 옵션을 추가 할 수 있습니다. 이것은 -iname
링크 이름 대신 링크 대상 이름 과 동일하게 작동합니다 .
find -type l -ilname "*bar*"
그래도 대상이 아닌 링크 이름이 인쇄됩니다. 대상 이름을 인쇄하려면 다음을 시도하십시오.
find -type l -ilname "*bar*" -printf "%l\n"
또는 풀 ls
스타일 출력을 얻으십시오
find -type l -ilname "*bar*" -ls
” 목록으로 작업 수행 “의 의미 는 확실하지 않지만 링크 파일을 조작하려면 -exec
인수를 사용하여 다음 을 찾을 수 있습니다.
find -type l -ilname "*bar*" -exec touch {} \;
그러나 링크 대상에서 작업해야하는 -printf
경우 대상 값을 가져 오려면 또는를 사용하여 xargs
루프를 실행해야합니다. 다음과 같이 할 수 있습니다.
find -type l -printf "%l\n" | grep bar | xargs touch
…이 방법 은 이름 일치를 수행 하는 grep
대신 사용하는 방법을 보여줍니다 find -ilname
.