web-dev-qa-db-ja.com

シンボリックリンクを作成-存在する場合は上書き

/path/to/data/folder/month/date/hour/minute/fileのデータを削除して/path/to/recent/fileにシンボリックリンクし、ファイルが作成されるたびにこれを自動的に実行したい。

/path/to/recent/fileが存在するかどうか事前にわからない場合、どうすれば作成(存在しない場合)または置き換え(存在する場合)できますか?私はそれが存在するかどうかを確認してから、削除、シンボリックリンクを実行できると確信していますが、私が望むことを1つのステップで実行する単純なコマンドがあるかどうか疑問に思っています。

61
drjrm3

マニュアル をお読みください。

ln -sfn /new/target /path/to/symlink

$ man ln

-n、-no-dereference
ディレクトリへのシンボリックリンクの場合、LINK_NAMEを通常のファイルとして扱います

39
LithiumSix

これがln-fオプションの目的です。リンクを作成する前に、既存の宛先ファイルがあれば削除します。

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

/path/to/recent/fileを指す/path/to/data/folder/month/date/hour/minute/fileのシンボリックリンクを作成し、必要に応じて既存のファイルまたはファイルへのシンボリックリンクを置き換えます(既に何も存在しない場合は正常に動作します)。

ディレクトリ、またはディレクトリへのシンボリックリンクがすでにターゲット名で存在する場合、シンボリックリンクはその中に作成されます(つまり、上記の例では/path/to/recent/file/fileになります)。 lnの一部のバージョンで使用可能な-nオプションは、ディレクトリへのシンボリックリンクを処理し、必要に応じてそれらを置き換えます。

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIX ln-nを指定していないため、一般にこれに依存することはできません。 lnの動作の多くは実装定義なので、実際に使用しているシステムの詳細を確認する必要があります。 GNU ln を使用している場合は、-tおよび-Tオプションも使用して、ディレクトリの存在下でその動作を完全に予測可能にすることができます( ieは、同じ名前の既存のディレクトリ内にリンクを作成する代わりに失敗します)。

87
Stephen Kitt