次のような人工的な例を見てください。
$ mkdir -p a/b && touch a/b/original-target && touch a/b/new-target
$ mkdir -p c1/c2 && cd c1/c2 && ln -s ../../a/b/original-target && cd -
$ mkdir -p d1/d2/d3 && cd d1/d2/d3 && ln -s ../../../a/b/original-target && cd -
$ tree .
.
├── a
│ └── b
│ ├── new-target
│ └── original-target
├── c1
│ └── c2
│ └── original-target -> ../../a/b/original-target
└── d1
└── d2
└── d3
└── original-target -> ../../../a/b/original-target
すべてのシンボリックリンクoriginal-target
をnew-target
。シンボリックリンクは相対パスを使用する必要があります。
ベストアンサー1
globstar
私はあなたがbashを使用すると**
仮定しているので。その後残ったのは少し遊んでreadlink
待つことですrealpath
。
shopt -s globstar
for file in c1/** d1/**; do
if [[ -h "$file" ]]; then
if [[ "$(readlink -f "$file")" == "$(realpath a/b/original-target)" ]]; then
ln -sf "$(dirname "$(readlink "$file")")"/new-target "$(dirname "$file")" && rm -f "$file"
fi
fi
done