Comment trouver tous les fichiers qui sont fondamentalement des liens souples ou physiques d’autres répertoires ou fichiers sur linux?
Question
Comment puis-je obtenir la liste de tous les fichiers liés sur mon système ou à partir d'un certain répertoire? J'avais l'habitude de créer des liens, mais ils sont devenus ingérables avec le temps. Je veux la liste de tous ces liens à partir d'un répertoire. Quelqu'un peut-il aider?
La solution
Il est facile de trouver des liens symboliques:
% find . -type l
La recherche de liens physiques est délicate, car si un sous-répertoire du répertoire en question possède également des sous-répertoires, ceux-ci augmentent le nombre de liens physiques. C’est ainsi que les sous-répertoires sont liés à leurs parents dans UNIX (c’est l’entrée ..
de chaque sous-répertoire).
Si vous souhaitez uniquement rechercher des fichiers liés (et non des répertoires), cela fonctionnera:
% find . -type f \! -links 1
Cela fonctionne car un fichier que a ont des liens physiques aura un nombre de liens > 1, et le fichier non lié a un nombre de liens == 1, par conséquent, cette commande recherche tous les fichiers dont le nombre de liens & Lt; & Gt; 1
Vous pouvez également utiliser les nouvelles versions de find
:
% find . -type f -links +1
Cela fonctionne pour la même raison que ci-dessus; Cependant, les versions les plus récentes de find peuvent prendre + n ou -n au lieu d'un nombre. Cela équivaut à tester plus de n ou moins que n, respectivement.
Autres conseils
find / -xdev -samefile filename
@OP, si vous avez trouvé GNU find, vous pouvez trouver des liens physiques en utilisant -printf "%n"
,
par exemple
find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum
do
echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum"
# if 2 or more files have the same inode number, then they are hard links.
# you can therefore count how many $inum that are the same and determine those hard links, which
# you have to try doing yourself.
done
Voir par exemple ici
https://www.gnu.org/software/findutils /manual/html_node/find_html/Hard-Links.html
ou combinez Alnitak et amber_linux answer dans
find -L /where/to/search -samefile /some/link/to/file
pour trouver tous les liens durs et souples vers un fichier donné.