파일 목록을 얻기 위해 심볼릭 링크로 필터링하는 방법(그런 다음 해당 목록으로 작업을 수행하는 방법)표적심볼릭 링크 이름 대신 이름이 있습니까? 예를 들어 다음 목록에서 처음 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
. 어느 쪽이든 이 작업을 수행할 수 있습니다.