次のディレクトリがあるとしましょう。
/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