すべてのファイルがシンボリック リンクとしてコピーされる再帰的なディレクトリ構造全体をコピーする最良の方法は何ですか?
つまり、コピーは元のディレクトリのディレクトリ (サブ) 構造全体をミラーリングする必要がありますが、各ファイルは単なるシンボリック リンクにする必要があります。
私は推測します...最初にディレクトリを作成したいと思います...
cd "$source"
find . -type d -exec mkdir -p "$target/{}" \;
次に、シンボリックリンクを作成します...
cd "$source"
find . -type f -print | (
cd "$target"
while read one; do
deep=$(echo "${one:2}" | sed 's:[^/][^/]*:..:g')
ln -s "${deep:3}/${one:2}" "$(basename "$one")"
done
)
ファイル名に改行やその他の奇妙な文字がある場合、これは失敗することに注意してください。find -exec
ディレクトリのレベルごとに異なる方法で $deep を計算する必要があるため、これを簡単に解決する方法は思いつきません (つまり、これを a で実行することです)。
また、これは未テストであり、テストする予定はありません。それがあなたにインスピレーションを与えるなら、それは素晴らしいことです。:)
これは、シンボリック リンクを作成するソリューションではありませんが、ハード リンクを作成します。
cp -rl $src $dst
短所: