回答:
このコマンドは機能するはずです:
find -type l -exec bash -c 'ln -f "$(readlink -m "$0")" "$0"' {} \;
使い方:
find -type l
現在のディレクトリ内のすべてのリンクを検索します。
-exec bash -c '...' {} \;
bashを呼び出して実行し...
ます。
これ{}
は、現在処理中のリンクの名前を引数として渡します。bashはとしてアクセスできます$0
。
readlink -m "$0"
シンボリックリンクのリンク先の絶対パスを返します。
ln -f "$(readlink -m "$0")" "$0"
ターゲットへのハードリンクで-f
シンボリックリンク$0
を上書きします()。
何らかの理由でリンクを変換できない場合、リンクはそのまま残り、lnはエラーメッセージを出力します。
bash
とln
?
-e
スイッチはそれを修正します。
brew install coreutils
とfind * -type l -exec bash -c 'ln -f "$(greadlink -m "$0")" "$0"' {} \;
。
cp -aH
)も参照してください。[1]:unix.stackexchange.com/questions/94185/…–