1

場所を移動したいシンボリックリンクが数百あります。たとえば、今:

randomfile -> /home/me/randomfile
randomfile2 -> /home/me2/randomfile2

このようなファイルがたくさんあります。シンボリックリンクをすべて何かのリンクにシフトしたいとします

randomfile -> ../me/randomfile
randomfile2 -> ../me2/randomfile2

これをバッチ処理する最も速い方法は何でしょうか?

4

1 に答える 1

3
for f in *; do
  ## if not a symlink, ignore this file
  [[ -L "$f" ]] || continue
  ## determine where it points
  tgt=$(readlink "$f")
  ## if not pointing to /home/*, ignore this file
  [[ $tgt = /home/* ]] || continue
  ## calculate the new target
  new_tgt=../${tgt#/home/}
  ## actually create the new link
  ln -T -sf "$new_tgt" "$f"
done

これはbash(/bin/shモードでは機能しません)とGNU lnを使用します-ln -T利用できない他の実装では、ターゲットがディレクトリの場合、追加のロジックが必要になる場合があります。

于 2012-06-05T00:20:27.820 に答える