다음 디렉터리가 있다고 가정해 보겠습니다.
/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