일부 하위 디렉터리를 포함하는 심볼릭 링크 만들기

일부 하위 디렉터리를 포함하는 심볼릭 링크 만들기

다음 디렉터리가 있다고 가정해 보겠습니다.

/source/dir1/sub1
/source/dir1/sub2
/source/dir1/sub3
/source/dir1/sub4

/source/dir2/sub1
/source/dir2/sub2
/source/dir2/sub3
/source/dir2/sub4

...(100개의 디렉토리/dir[n]이 더 있다고 가정)

소스 디렉터리의 모든 디렉터리를 포함하지만 sub1 및 sub3 하위 디렉터리만 포함하는 소스 디렉터리(새 디렉터리를 "target"이라고 부름)에 대한 소프트 링크를 만들고 싶습니다.

이를 수행하는 올바른 구문은 무엇입니까? 예를 들어,

cd target
ln -s /source/**/sub1 .
ln -s /source/**/sub3 .

예상 출력을 표시하도록 업데이트되었습니다.

    /target/dir1/sub1
    /target/dir1/sub3

    /target/dir2/sub1
    /target/dir2/sub3
...

답변1

를 사용한다고 가정하면 bash다음 루프를 사용할 수 있습니다.

cd target
for dir in /source/*/sub{1,3}; do
  parentdir=${dir%/*}        # remove last directory, e.g. `/sub1`
  parentdir=${parentdir##*/} # leave the directory name, e.g. `dir1`
  mkdir -p "$parentdir"
  ln -s "$dir" -t "$parentdir"
done

소스 디렉터리 경로가 상대 경로여야 하는 경우 -r옵션을 추가합니다.ln

관련 정보