%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
특정 디렉토리의 ln -s
모든 파일(또는 로 끝나는 파일 클래스)에 대한 심볼릭 링크( )를 만들고 싶습니다 . .bar
내가 cwd에 있다고 말하면 다음과 같이 입력 ls ../source/*.bar
하면 됩니다.
foo.bar
baz.bar
ln -s
최종적으로 해결되는 매개변수 목록을 어떻게 전달할 수 있나요?
ln -s ../source/foo.bar
ln -s ../source/baz.bar
xargs
물론 나는 bash 스크립트를 작성할 수 있다는 것을 알고 있지만 적어도 나에게는 일반적인 작업인 것처럼 보이기 때문에 더 간단한 것이 있어야 합니다 .
답변1
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의 각 TARGET에 대한 링크를 만듭니다.
답변2
globstar(bash/zsh 설정: shopt -s globstar
)를 사용하여 재귀적으로 시도할 수 있습니다.
ls -vs ../**/*.bar .
참고: -v
자세한 설명을 위해 추가되었습니다.
또는 목록이 너무 길면 find
유틸리티를 사용하십시오.
find .. -name \*.bar -exec ln -vs "{}" dest/ ';'
이렇게 하면 에 링크가 생성되거나 현재 폴더에 대한 dest/
링크가 으로 변경됩니다 ..
답변3
사용find
certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;
또한, 사용하는 것을 잊지 마세요전체 경로(가능한 경우) 심볼릭 링크를 사용합니다.
답변4
cp
옵션을 사용하면 -s
소프트 링크(또는 -l
하드 링크)를 만들 수 있습니다.
현재 디렉토리에서 다음과 같이 사용할 수 있습니다.
$ cp -s ../path/with/scripts/* .
귀하의 경우에는 다음과 같습니다:
$ cp -s ../source/*.bar .