创建包含某些子目录的符号链接

创建包含某些子目录的符号链接

假设我有以下目录:

/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 子目录。

执行此操作的正确语法是什么?例如,

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

相关内容