一部のサブディレクトリを含むシンボリックリンクの作成

一部のサブディレクトリを含むシンボリックリンクの作成

次のディレクトリがあるとしましょう。

/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

関連情報