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

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

특정 디렉토리의 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 .

관련 정보