Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Detruire des fichiers qui sont des liens vers des fichiers disparus

6 réponses
Avatar
olivier.marti
Hello,

J'ai une grosse série de liens qui pointent vers des fichiers qui
n'existent plus. Je cherche une façon efficace de faire du ménage. Les
liens ont été fait en ligne de commande, avec ln -s ...

C'est sous Mac OS X 10.6

Une idée ?

La ligne de commande ne me fait pas peur, mais la je sèche.

Merci d'avance

Olivier

6 réponses

Avatar
Éric Lévénez
Le 30/12/09 18:13, Olivier Marti a écrit :




J'ai une grosse série de liens qui pointent vers des fichiers qui
n'existent plus. Je cherche une façon efficace de faire du ménage. Les
liens ont été fait en ligne de commande, avec ln -s ...



La commande suivante recherche, à partir du répertoire courant, tous les
liens symboliques que l'on ne peut pas suivre (lire) :

find . -type l ! -exec test -r {} ; -ls

Cela liste les liens perdus, mais aussi les liens sur des fichiers dont
on n'a pas les droits de lecture. Mais si les fichiers sont à toi, cela
devrait marcher.

Après il suffit de remplacer le "-ls" par "-exec rm {} ;"

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
YBM
Éric Lévénez a écrit :
Le 30/12/09 18:13, Olivier Marti a écrit :




J'ai une grosse série de liens qui pointent vers des fichiers qui
n'existent plus. Je cherche une façon efficace de faire du ménage. Les
liens ont été fait en ligne de commande, avec ln -s ...



La commande suivante recherche, à partir du répertoire courant, tous les
liens symboliques que l'on ne peut pas suivre (lire) :

find . -type l ! -exec test -r {} ; -ls

Cela liste les liens perdus, mais aussi les liens sur des fichiers dont
on n'a pas les droits de lecture. Mais si les fichiers sont à toi, cela
devrait marcher.



test -e doit marcher aussi dans le cas d'un lien symbolique dont la
cible n'existe pas, et correspond exactement à ce qui est souhaité.

Après il suffit de remplacer le "-ls" par "-exec rm {} ;"


Avatar
olivier.marti
Éric Lévénez wrote:

Le 30/12/09 18:13, Olivier Marti a écrit :
>

> J'ai une grosse série de liens qui pointent vers des fichiers qui
> n'existent plus. Je cherche une façon efficace de faire du ménage. Les
> liens ont été fait en ligne de commande, avec ln -s ...

La commande suivante recherche, à partir du répertoire courant, tous les
liens symboliques que l'on ne peut pas suivre (lire) :

find . -type l ! -exec test -r {} ; -ls

Cela liste les liens perdus, mais aussi les liens sur des fichiers dont
on n'a pas les droits de lecture. Mais si les fichiers sont à toi, cela
devrait marcher.

Après il suffit de remplacer le "-ls" par "-exec rm {} ;"



Je ne connaissais pas le truc de la commande après le "; ". Ca ouvre
effectivement beaucoup de possibilités !

Merci

Olivier
Avatar
Éric Lévénez
Le 30/12/09 22:59, Olivier Marti a écrit :
Éric Lévénez wrote:

La commande suivante recherche, à partir du répertoire courant, tous les
liens symboliques que l'on ne peut pas suivre (lire) :

find . -type l ! -exec test -r {} ; -ls

Cela liste les liens perdus, mais aussi les liens sur des fichiers dont
on n'a pas les droits de lecture. Mais si les fichiers sont à toi, cela
devrait marcher.

Après il suffit de remplacer le "-ls" par "-exec rm {} ;"



Je ne connaissais pas le truc de la commande après le "; ". Ca ouvre
effectivement beaucoup de possibilités !



Non :-)

"-ls" est une commande interne de find, aucun rapport avec le ";".

"-ls" est en gros équivalent à "-exec ls -ldis {} ;". Le "{}" sera
remplacé par le nom du fichier trouvé. La commande "-exec" (ou "-ok")
exécute effectivement une commande externe _terminée_ par ";". On escape
ce point-virgule à cause du shell qui lance le find.


--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
olivier.marti
Éric Lévénez wrote:

Le 30/12/09 22:59, Olivier Marti a écrit :
> Éric Lévénez wrote:
>
>> La commande suivante recherche, à partir du répertoire courant, tous les
>> liens symboliques que l'on ne peut pas suivre (lire) :
>>
>> find . -type l ! -exec test -r {} ; -ls
>>
>> Cela liste les liens perdus, mais aussi les liens sur des fichiers dont
>> on n'a pas les droits de lecture. Mais si les fichiers sont à toi, cela
>> devrait marcher.
>>
>> Après il suffit de remplacer le "-ls" par "-exec rm {} ;"
>
> Je ne connaissais pas le truc de la commande après le "; ". Ca ouvre
> effectivement beaucoup de possibilités !

Non :-)




Ben si ;-)

Par rapport à ce que je savais faire avec find, si, quand même, ça
m'ouvre beaucoup de possibilités ....

"-ls" est une commande interne de find, aucun rapport avec le ";".

"-ls" est en gros équivalent à "-exec ls -ldis {} ;". Le "{}" sera
remplacé par le nom du fichier trouvé. La commande "-exec" (ou "-ok")
exécute effectivement une commande externe _terminée_ par ";". On escape
ce point-virgule à cause du shell qui lance le find.



Oui, ça je connaissais. Mais je ne savais pas qu'on pouvait enchainer
après le premier ; C'est très fort.

Merci pour tout, et bonne année à tous les geeks et à tous les neuneus
:-)

Olivier
Avatar
Éric Lévénez
Le 31/12/09 12:36, Olivier Marti a écrit :
Éric Lévénez wrote:

Le 30/12/09 22:59, Olivier Marti a écrit :

Je ne connaissais pas le truc de la commande après le "; ". Ca ouvre
effectivement beaucoup de possibilités !



Non :-)



Ben si ;-)



Ok, je pensais que tu parlais des commandes unix qui sont avant le
point-virgule et non _après_, mais tu parlais en fait des commandes "find".

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.