OS Xでシンボリックリンクを変更する方法は?


20

シンボリックリンクが指す場所を、新しいものを削除して作成せずに変更するにはどうすればよいln -s "/path/to/point/to" "/path/where/symlink/is"ですか?

Javaの「Current」シンボリックリンクに対してこれを実行しようとすると、Javaは動作しませんでした(少なくともコマンドラインからは「セグメンテーションフォールト」と表示されました)。マシン(ただし、後で、/Applications/Utilities/Java Preferences.app現在のJavaバージョンを変更するために使用する必要があることがわかりました)。

回答:


8
mkdir /path/where/newsymlink
ln -s /path/to/point/to /path/where/newsymlink/is
mv /path/where/newsymlink/is /path/where/symlink/
rmdir /path/where/newsymlink

ただし、Java Preferencesユーティリティは単なるシンボリックリンク以上のものを変更します。これを使用して、Javaバージョンが変更されていることを確認する必要があります。


mvコマンドは名前を変更しませんか?
mk12

..私はそれを試しましたが、古いシンボリックリンクが指すフォルダーに新しいシンボリックリンクを移動します。
mk12

最初のコマンドは、必要な場所を指すシンボリックリンクを作成し、2番目のコマンドは、古い場所への既存のポインターを新しい場所へのポインターに置き換えます。mvはアトミックであるため、シンボリックリンクは常に存在します。
mark4o

..しかし、まだ機能しません..古いポインターが指すフォルダーに新しいポインターを移動します。
mk12

/path/where/symlink/is変更するシンボリックリンクです。これらのコマンドを使用すると、を指すように変更されます/path/to/point/to。元のシンボリックリンクが指すフォルダーはまったく変更されません。
mark4o

29
ln -hfs newlocation existinglink

または

ln -nfs newlocation existinglink

新しい場所を指すように既存のリンクを変更します

(-nと-hの動作は同じです)

「man ln」から

-h target_fileまたはtarget_dirがシンボリックリンクである場合、それに従いません。これは、ディレクトリを指すシンボリックリンクを置き換えるために、-fオプションを使用する場合に最も便利です。

-fターゲットファイルが既に存在する場合は、リンクが解除されるようにリンクを解除します。(-fオプションは、以前の-iオプションをオーバーライドします。)

-s Creaeシンボリックリンク


この-nfsバージョンはLinuxでも動作するため、誰でも気になればよりポータブルになります。
クロマックス

10

試してください:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link

1
Mavericksを搭載した2013年後半のMacBook Proでは、2つのパラメーターを切り替える必要がありました。ln-s / path / to / symbolic / link / path / to / target
Marius Waldal

1

lnコマンドはリンクの変更を許可せず、新しいリンクを作成するだけです。


0

リンクを変更する前後で、リンクとターゲットのアクセス許可を比較しましたか?動作させるには、適切なchownコマンドとchmodコマンドでフォローアップする必要がある場合があります。


まあ私はそれを変更する方法さえ知らないのでいいえ。そして、chownとchmodが何をするのかわかりません。
mk12

2
chownは、ファイルやディレクトリの所有権を変更します。chmodは、ファイルやディレクトリの許可を変更します。これらは、ほぼすべてのUNIXプラットフォームで標準です。ここでそれぞれを説明するには詳細すぎるため、チュートリアルではそれぞれをグーグルで検索することをお勧めします。「man chown」または「man chmod」を実行して、コマンドの実際のマニュアルを読むこともできます(マニュアルから抜け出すにはqを押します)。
2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.