Forum général.général Hardlinks: créer en masse / transformer softlinks en hardlinks

Posté par . Licence CC by-sa
1
24
sept.
2014

Bonjour,

Une question sur un élément de base : les hardlinks et softlinks. J'ai fais quelques recherches infructueuses et je viens donc vous demander conseil:
Voilà l'idée : j'ai un album photo dans un dossier A, et j'ai créé un album photo plus court à partir de "l'album-mère" dans le dossier B (Les jolies photos se retrouvent donc en A et B, les moches uniquement en A). Donc perte d'espace en comparaison à des soft ou hardlinks.
En bricolant un peu, je peux créer des softlinks pour les fichiers du dossier B pointant vers ceux du dossier A (exhaustif) : je renomme temporairement A en A' et B en A, je créé à l'aide de l'interface graphique toute simple des softlinks pour touts les fichiers dans B [renommé en A]. Comme ça les softlinks pointent vers le dossier nommé A. Comme ça lorsque je redonne aux dossiers leurs noms originaux (A' -> A ; A -> B), les softlinks de B pointent vers les fichiers de A, et je garde le sous album B que j'ai créé à partir de A en gagnant de la place.
(en résumé : A -> A' -> A ; B -> A [création des softlinks] -> B ; -> pour 'renommer')

Pour aller plus loin, j'aimerai bien créer plutôt des hardlinks entre ces deux dossiers. Comment faire ? En effet il me faudrait faire ça en masse, donc une ligne de commande par fichier, c'est pas top. L'idéal serait aussi de ne pas perdre l'information de tri (telle photo de A a été triée pour être copiée en B).

Auriez-vous une astuce sympathique ?

Merci beaucoup,

Thomas

  • # Pareil en fait!

    Posté par (page perso) . Évalué à 3.

    Salut,

    Comment as-tu créé les liens symboliques ?

    Parce que la différence est infime en ligne de commande :

    # liens symboliques
    ln -s <cible> <nom du lien>
    
    # liens en dur
    ln <cible> <nouveau nom>

    Pour le traitement en masse, il suffit d'encapsuler tout ça dans une boucle for.

    Les hard links se font au niveau du numéro de l'inode, et de ce fait, un hard link n'est un autre nom pour un même fichier. L'inconvénient, c'est que ce n'est pas possible entre systèmes de fichiers différents.

    Par contre, comme ça pointe vers le numéro de l'inode du fichier cible, ça veut donc dire que même si tu changes le chemin du fichier cible, le lien marchera toujours.

    Si j'ai bien compris, tu veux deux répertoires A et B contenant des photos tel que B \subset A.

    Tu veux que les éléments de B soient des hard links vers ceux de A.

    Je suppose que tu souhaites utiliser une interface graphique, et là, je ne sais pas trop comment t'aider, mais en shell, je suivrait la méthode suivante :
    1. soit une liste de fichiers que je veux avoir dans B ;
    2. créer un dossier vide "B" ;
    3. boucle for sur la liste des fichiers, créant les hard links.

  • # dedup

    Posté par (page perso) . Évalué à 3.

    Si l'idée c'est juste de sauver de l'espace, peut-être que tu pourrais considérer un système de fichiers qui supporte la déduplication. Selon ton système d'exploitation ça a l'air d'être implémenté dans Fossil, ZFS, NTFS, VxFS et Btrfs.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # fdupes

    Posté par . Évalué à 4.

    Si tu as la bonne version de fdupes :
    fdupes -rdLN /path_to_A /path_to_B

    fdupes va parcourir tous les fichiers, lorsqu'il en trouve plusieurs identiques va garder le premier puis va supprimer les seconds pour créer des hardlinks vers le premier (fait des tests, hein..)

    Si ta version dans tes packages ne gère pas cette option, tu devrais pouvoir utiliser celle ci : https://github.com/tobiasschulz/fdupes

  • # 2 commandes à connaître : hardlink et cp -al

    Posté par (page perso) . Évalué à 1.

    Salut,

    J'utilise beaucoup les liens matériels (hard links en anglais).

    Deux commandes à connaître également :

    hardlink
    (paquetage du même nom à installer) permet de créer des liens matériels pour remplacer des fichiers identiques dans un ou plusieurs dossiers passés en arguments. Ça peut prendre du temps car dès que deux fichiers ont la même taille, une vérification bit à bit est effectuée… Il faudra en général pouvoir considérer l'ensemble de ces dossiers comme "en lecture seul" car il n'est pas intuitif de garder à l'esprit qu'en modifiant un fichier on en modifie peut-être un autre… « Tranquille, j'ai d'autres copies de se fichier :) » ben non…

    cp -al
    Pour copier en ne créant que des liens matériel (pour les fichiers).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.