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


54

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

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


宛先が存在するが、シンボリックリンクではない場合、何が起こりますか/何が起こると思われますか?
トビースパイト

回答:


34

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

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

$ man ln

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


1
なぜこれが正しい答えですか?
-Mrchief

1
@Mrchief フラグの/path/to/symlinkないディレクトリへのシンボリックリンクが既にある場合、シンボリックリンクを置き換える代わりに-n作成されます/path/to/symlink/target/path/to/symlink
Flimm

macOSでは、インスタンス/path/to/symlinkが存在し、ディレクトリであり、シンボリックリンクではない場合など、場合によってはまだ機能しないことに注意してください。この問題を回避する唯一の方法は、rm -rf最初に実行することだと思います。
フリム

78

これが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、上の例で終わります)。の-n一部のバージョンで使用可能なオプションは、lnディレクトリへのシンボリックリンクを処理し、必要に応じてそれらを置き換えます。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.