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.
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
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).