Ich möchte Daten speichern /path/to/data/folder/month/date/hour/minute/file
und mit diesen verknüpfen /path/to/recent/file
und dies bei jeder Erstellung einer Datei automatisch tun.
Angenommen, ich weiß nicht im Voraus, ob es /path/to/recent/file
existiert. Wie kann ich vorgehen, um es zu erstellen (wenn es nicht existiert) oder zu ersetzen (wenn es existiert)? Ich bin sicher, ich kann einfach prüfen, ob es existiert, und dann einen Lösch- oder Symlink-Befehl ausführen, aber ich frage mich, ob es einen einfachen Befehl gibt, der in einem Schritt das macht, was ich will.
Antworten:
Bitte lesen Sie das Handbuch .
quelle
/path/to/symlink
bereits ein Symlink zu einem Verzeichnis ohne-n
Flag vorhanden ist, wird der Symlink in erstellt,/path/to/symlink/target
anstatt zu ersetzen/path/to/symlink
/path/to/symlink
es ein Verzeichnis und keinen Symlink gibt. Ich denke, die einzige Möglichkeit, dies zu umgehen, besteht darin,rm -rf
zuerst zu laufen .Dies ist der Zweck der
ln
‚s-f
Option: die bestehenden Zieldateien entfernt, falls vorhanden, bevor die Verbindung zu schaffen.erstellt den Symlink
/path/to/recent/file
, auf den verwiesen wird ,/path/to/data/folder/month/date/hour/minute/file
und ersetzt gegebenenfalls eine vorhandene Datei oder einen Symlink zu einer Datei (und funktioniert einwandfrei, wenn dort bereits nichts vorhanden ist).Wenn bereits ein Verzeichnis oder ein Symlink zu einem Verzeichnis mit dem Zielnamen vorhanden ist, wird der Symlink darin erstellt (so dass Sie
/path/to/recent/file/file
im obigen Beispiel enden würden ). Die-n
Option, die in einigen Versionen von verfügbarln
ist, kümmert sich um Symlinks zu Verzeichnissen und ersetzt diese bei Bedarf:Da POSIX
ln
keine Angaben macht-n
, können Sie sich nicht generell darauf verlassen. Ein Großteil desln
Verhaltens ist implementierungsspezifisch, sodass Sie die Besonderheiten des von Ihnen verwendeten Systems überprüfen müssen. Wenn Sie mit GNUln
, können Sie die Verwendung-t
und-T
auch Optionen, um sein Verhalten völlig vorhersehbar in Gegenwart von Verzeichnissen zu machen ( dh nicht statt den Link innerhalb des bestehenden Verzeichnisses mit dem gleichen Namen erstellen).quelle