web-dev-qa-db-fra.com

Créer un lien symbolique - remplacer s'il en existe un

Je souhaite supprimer des données dans /path/to/data/folder/month/date/hour/minute/file et créez un lien symbolique vers /path/to/recent/file et le faire automatiquement chaque fois qu'un fichier est créé.

En supposant que je ne saurai pas à l'avance si /path/to/recent/file existe, comment puis-je le créer (s'il n'existe pas) ou le remplacer (s'il existe)? Je suis sûr que je peux simplement vérifier s'il existe, puis faire une suppression, un lien symbolique, mais je me demande s'il existe une commande simple qui fera ce que je veux en une seule étape.

61
drjrm3

Veuillez lire le manuel .

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

$ man ln

-n, --no-dereference
traitez LINK_NAME comme un fichier normal s'il s'agit d'un lien symbolique vers un répertoire

39
LithiumSix

C'est le but de l'option -f De ln: elle supprime les fichiers de destination existants, le cas échéant, avant de créer le lien.

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

créera le lien symbolique /path/to/recent/file pointant vers /path/to/data/folder/month/date/hour/minute/file, remplaçant tout fichier existant ou lien symbolique vers un fichier si nécessaire (et fonctionnant correctement si rien n’existe déjà).

Si un répertoire, ou un lien symbolique vers un répertoire, existe déjà avec le nom cible, le lien symbolique sera créé à l'intérieur (donc vous vous retrouveriez avec /path/to/recent/file/file Dans l'exemple ci-dessus). L'option -n, Disponible dans certaines versions de ln, s'occupe pour vous des liens symboliques vers les répertoires, en les remplaçant si nécessaire:

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

POSIX ln ne spécifie pas -n Donc vous ne pouvez pas vous y fier en général. Une grande partie du comportement de ln est définie par l'implémentation, vous devez donc vraiment vérifier les spécificités du système que vous utilisez. Si vous utilisez GNU ln , vous pouvez également utiliser les options -t Et -T Pour rendre son comportement entièrement prévisible en présence de les répertoires ( ie échouent au lieu de créer le lien dans le répertoire existant avec le même nom).

87
Stephen Kitt