最近のNTFSとWindowsはシンボリックリンクを実装しています。
linkd
またはjunction
ツールを使用するNTFS 3.0(Windows 2000)以降、ディレクトリシンボリックリンクとして使用できます。mklink
ツールを使用しているため、(ファイルとディレクトリの両方の)シンボリックリンクとしても使用できます。ただし、Cygwin 1.7(Windows 7にインストール)では、ln -s
はテキストファイルを作成します。
cygwinの場合:
$ ln -s -v target mylink
`mylink' -> `target'
minGW(またはお気に入りのエディター):
$ cat mylink
!<symlink>ÿþt a r g e t
Cygwingに NTFSジャンクションポイント または NTFSシンボリックリンク ?を使用するように指示することは可能ですか?
他の質問:これはMinGWで利用可能ですか?
受け入れられた答えは正しい、2つの小さなサイドノートです。
コマンドラインで自分で作成したシンボリックリンクだけを気にする場合は、_cygutils-extra
_パッケージをインストールします。これにはwinln
コマンドが含まれます。これはln
と同じ構文ですが、ネイティブWindowsリンクを作成します。エイリアスを作成します:_alias ln=winln
_(インタラクティブシェルでのみ動作します)、またはln
ファイルをwinln
で置き換えます(シェルスクリプトでも動作します)-しかし、次回coreutils
パッケージが更新されると上書きされる可能性があります。
Cygwinを既にインストールしていて、自分でいくつかのシンボリックリンクを追加した場合にのみ、ネイティブシンボリックリンクを使用できることがわかりました。したがって、システム環境変数として_CYGWIN=winsymlinks:native
_を設定した後、既存の非ネイティブリンクをすべてネイティブに変換したいと考えました。これが私がしたことです。
念のため、最初にCygwinディレクトリ全体をバックアップしてください。
すべてのシンボリックリンクを見つけて、リストを_/links
_ファイルに保存します:cd /; find . -regextype egrep -regex './(dev|proc|mnt|cygdrive)' -Prune -o -type l -print >links
links
を確認します。すべてのリンクを使用してtar
アーカイブを作成します:_tar c --files-from=links >links.tar
_
tar
アーカイブを抽出します。_tar x --files-from=links <links.tar
_ネイティブシンボリックリンクが有効になったため、tarは古いCygwinのシンボリックリンクをネイティブシンボリックリンクで上書きします。
クリーンアップ:_rm -f links links.tar
_
追伸最初は_CYGWIN=winsymlinks:nativestrict
_を使用しましたが、このモードではtarget
が存在しないと_ln -s target link
_が失敗することがわかりました。対照的に、native
は、存在しないlink
を指すCygwin(非ネイティブ)シンボリックリンクtarget
を作成します。これは、UNIXシステムでのln
の動作と一致します。まれに、nativestrict
が一部のプログラムまたはスクリプトを破損することがあります。たとえば、Gentoo _run-crons
_スクリプトは、実行中のプロセスのPIDを指すシンボリックリンクであるロックファイルを使用します。 nativestrict
モードでは、ロックファイルを作成できなくなったため、スクリプトは動作を停止しました。注:_run-crons
_はGentoo Linuxのcrontabヘルパースクリプトであり、_cron.{hourly,daily,weekly,monthly}/
_ dirsのサポートを追加し、Cygwinで非常にうまく機能します。
@olibreの回答は私にとってはうまくいきませんでした。シェル関数を作成しました。
: '
mklink - Create NTFS (Windows) links that is usable by Windows and Cygwin
Usage: mklink [/D | /H | /J] <link-path> <target-path>
Options:
/D Directory Symbolic Link
/H Hardlink
/J Directory Junction (you should prefer /D)
With no options, it creates a NTFS file symlink.
'
mklink () {
if [ "$#" -ge "3" ]; then
cmd /c mklink "$1" "$(cygpath --windows --absolute "$2")" "$(cygpath --windows --absolute "$3")"
else
cmd /c mklink "$(cygpath --windows --absolute "$1")" "$(cygpath --windows --absolute "$2")"
fi
}
上記を問題なく実行するには、管理者権限(Cygwin用)が必要であることに注意してください。
絶対パスへのシンボリックリンクとCMDのmklink
を使用した相対パスへのシンボリックリンクとの間に違いがあるかどうかはわからないことに注意してください。 Linuxでは、シンボリックリンクの移動、ターゲットファイルの移動、またはその両方の移動を決定した場合、これら2つの動作は異なります。
一番簡単な方法は
grant SeCreateSymbolicLinkPrivilege ローカルグループポリシーエディターから(gpedit.msc、デフォルトではパス上、非ホームバージョン)
パスにln
という名前のスクリプト(バッチまたはバッシュ)を作成します。上記のシェル関数と同様の実装
利益