Bonjour à tous, je dois faire ceci sous Linux:
- Donné: nom de fichier 'foo.txt'
- Rechercher: tous les fichiers qui sont des liens symboliques vers 'foo.txt'
Comment faire? Merci!
Bonjour à tous, je dois faire ceci sous Linux:
Comment faire? Merci!
Réponses:
Cela dépend, si vous essayez de trouver des liens vers un fichier spécifique qui est appelé, foo.txt,
c'est le seul bon moyen:
find -L / -samefile path/to/foo.txt
D'un autre côté, si vous essayez simplement de trouver des liens vers n'importe quel fichier qui se trouve être nommé foo.txt
, alors quelque chose comme
find / -lname foo.txt
ou
find . -lname \*foo.txt # ignore leading pathname components
-xtype l
pour n'avoir que les liens symboliques de la liste
find . -lname '*foo.dir*'
(correspond par exemple file.txt -> ../foo.dir/file.txt
)
Trouvez le numéro d'inode du fichier, puis recherchez tous les fichiers avec le même numéro d'inode:
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
Sinon, essayez l' lname
option de find
, mais cela ne fonctionnera pas si vous avez des liens symboliques relatifs, par exemplea -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefile
option avec -L
pour le même effet, sans avoir à rechercher l'inode vous
foo
est un répertoire, utilisez ln -di
, sur une seule ligne:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Je préfère utiliser l' symlinks
utilitaire, qui est également pratique lors de la recherche de liens symboliques rompus. Installer par:
sudo apt install symlinks
Afficher tous les liens symboliques dans le dossier et les sous-dossiers actuels:
symlinks -rv .
-r
: récursif-v
: verbeux (afficher tous les liens symboliques, pas seulement les liens rompus)Pour trouver un lien symbolique spécifique, il suffit de grep
:
symlinks -rv . | grep foo.txt