J'ai besoin de trouver tous les fichiers liés sur un système de fichiers donné. Par exemple, obtenir une liste de fichiers, chaque ligne contient des paires liées, ou des triplets, etc.
Je comprends plus ou moins comment le faire, il faut créer un dictionnaire tapé par inode pour tous les fichiers / répertoires d'un système de fichiers, exclure "." et les liens "..", puis les indodes avec plus d'un nom sont des liens physiques ... Mais j'espère qu'il existe peut-être une solution toute faite, ou que quelqu'un a déjà écrit un tel script.
find / -type f -links +1 -printf '%i %n %p\n'
sort
(+uniq
)? j'étais curieux alors j'ai essayé sur mon ordinateur principal (16 Go i5-2500k avec ssd). avec 2187757 fichiers (find / -xdev -type f | wc
) prend 12 secondes réelles lors du retour de 3820 fichiers / 570 inodes (time sudo find / -xdev -type f -links +1 -printf "%i\n" | sort | uniq | wc
). vous auriez besoin d'inclure le%n %p
pour les fichiers réels comme je les ai pris pour compter les inodes.donne une liste de tous les fichiers qui ont plus d'un lien, c'est-à-dire les fichiers auxquels il existe un lien dur. La boucle est alors relativement facile - une solution hacky si vous n'avez pas autant de fichiers serait
Mais j'espère sincèrement qu'il existe de meilleures solutions, par exemple en laissant le premier
find
appel imprimer les numéros d'inode puis en utilisantfind
l'-inum
option de pour afficher tous les fichiers associés à cet inode.la source
find . -type f -printf '%i %p\n'
, permettrait de construire une solution beaucoup plus rapide.for
boucle, ajuster IFS en conséquence fonctionnerait. Pour analyser la sortie de la commande find dans mon commentaire, déclarer tout ce qui se trouve entre le premier espace et la fin de la ligne comme nom de fichier devrait également fonctionner.lost+found
etc.); ce qui est particulièrement important, si la sortie doit être traitée davantage comme dans la deuxième ligne.À mon humble avis, la meilleure façon est d'utiliser la ligne suivante (à coup sûr, vous devez remplacer
/PATH/FOR/SEARCH/
par ce que vous voulez rechercher):cela analyse le système de fichiers une seule fois, affiche l'inode, le nombre de liens physiques et le chemin des fichiers avec plus d'un lien physique et les trie en fonction de l'inode.
si vous êtes ennuyé par les messages d'erreur pour les dossiers que vous n'êtes pas autorisé à lire, vous pouvez étendre la ligne à ceci:
la source