심볼릭 링크 대상별로 파일 나열

심볼릭 링크 대상별로 파일 나열

파일 목록을 얻기 위해 심볼릭 링크로 필터링하는 방법(그런 다음 해당 목록으로 작업을 수행하는 방법)표적심볼릭 링크 이름 대신 이름이 있습니까? 예를 들어 다음 목록에서 처음 4개 파일(대상 포함)에만 관심이 있습니다 bar.

foo ->  /tmp/bar
bar ->  /home/me/bartoo
baz ->  /home/me/public/barthree
zoo ->  /usr/share/bar
moo ->  /tmp/foo
roc ->  /tmp/roc

답변1

find를 사용하여 심볼릭 링크 유형의 모든 파일을 가져오고 -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. 어느 쪽이든 이 작업을 수행할 수 있습니다.

관련 정보