디렉토리의 모든 파일 (파일 클래스)에 대한 심볼릭 링크를 만드는 방법은 무엇입니까?


43

특정 디렉토리의 ln -s모든 파일 (또는 파일로 끝나는 파일 클래스)에 대한 심볼릭 링크 ( ) 를 만들고 싶습니다 .bar. 내가 cwd에 있고 유형 ls ../source/*.bar이 나에게 있다고 말해

foo.bar
baz.bar

ln -s마지막으로 해결 되는 매개 변수 목록을 전달하는 방법

ln -s ../source/foo.bar
ln -s ../source/baz.bar

물론 나는 bash 스크립트를 작성할 수 있다는 것을 알고 있지만 xargs적어도 나에게는 일반적인 작업 인 것처럼 보이기 때문에 더 간단한 것이 있어야합니다 .

답변:


75

ln 여러 인수를 취하지 만 그 경우 대상 디렉토리를 지정하는 것을 잊지 마십시오.

따라서 귀하의 예 .에는 대상 디렉토리가 있으므로 쉽게해야합니다.

ln -s ../source/*.bar .

부터 man ln; 위의 명령은 세 번째 형식을 사용합니다.

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
  • 첫 번째 양식에서 이름이 LINK_NAME 인 TARGET에 대한 링크를 작성하십시오.
  • 두 번째 양식에서 현재 디렉토리에 TARGET에 대한 링크를 작성하십시오.
  • 세 번째 및 네 번째 양식에서 DIRECTORY의 각 대상에 대한 링크를 작성하십시오.

5
당신은 저의 삶의 5 분을 저에게 구해 냈습니다. :-)
moodboom

파일이 없으면 작동하지 않습니다 *.bar. 이름 "*.bar"이 아닌 링크가 만들어 지지만 원하는 것은 아닙니다.
님로드

1
@Nimrod : 맞습니다. 그러나 bash 에게 대신 오류를보고하도록 지시 할 수 있습니다 shopt -s failglob. 예를 들어, 참조 unix.stackexchange.com/a/216227/33390 (에서 이에 해당하는 zsh을가 있다 setopt nomatch기본적으로 설정되어있는)
MPY

: 박수 : 좋습니다!
Chris Schmitz

3

용도 find

certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;

또한 심볼릭 링크와 함께 전체 경로 (가능한 경우) 를 사용해야 합니다.


2
고마워, 그렇지 find $certainDir -name "*.bar" -exec ln -s {} \;? 왜 전체 경로를 사용해야합니까? 내부 트리가있는 디렉토리 트리를 이동할 때 링크가 그대로 유지된다는 것을 알면 매우 편리합니다.
dastrobu

디렉토리를 심볼릭 링크하려는 위치에 따라 다릅니다. 그리고 전체 경로가 왜 좋은 아이디어인지 기억이 나지 않습니다. 그것은 하드 링크에 대한 것일 수도 있지만 이유가 있기 때문에 그것을 내 마음에 태 웠습니다. 흠.
방금 검색 :

고마워요, 당신의 대답은 훌륭합니다. mpy의 답변이 질문에 대한 더 간단한 해결책이므로 요점은 그에게 달려 있습니다. 가능하다면 두 가지 대답을 모두 받아 들일 것입니다.
dastrobu

3

globstar (bash / zsh set by shopt -s globstar) 를 사용하여 재귀 적으로 시도 할 수 있습니다 .

ls -vs ../**/*.bar .

참고 : -v자세한 내용을 추가 했습니다.

또는 find유틸리티를 사용하여 목록이 너무 긴 경우 :

find .. -name \*.bar -exec ln -vs "{}" dest/ ';'

에 링크가 만들어 dest/지거나 .현재 폴더로 변경됩니다 .


두 번째는 정답입니다.
님로드

0

cp-s옵션 소프트 링크 (또는 생성 할 수 있습니다 -l하드 링크).

현재 디렉토리에서 다음과 같이 사용할 수 있습니다.

$ cp -s ../path/with/scripts/* .

귀하의 경우 다음과 같습니다.

$ cp -s ../source/*.bar .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.