Detruire des fichiers qui sont des liens vers des fichiers disparus

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Éric Lévénez
Le #20861671
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 -- Unix is not only an OS, it's a way of life.
YBM
Le #20862521
É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 {} ;"


olivier.marti
Le #20863391
É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 {} ;"



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

Merci

Olivier
Éric Lévénez
Le #20863621
Le 30/12/09 22:59, Olivier Marti a écrit :
Éric Lévénez
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 -- Unix is not only an OS, it's a way of life.
olivier.marti
Le #20866071
Éric Lévénez
Le 30/12/09 22:59, Olivier Marti a écrit :
> Éric Lévénez >
>> 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
Éric Lévénez
Le #20867111
Le 31/12/09 12:36, Olivier Marti a écrit :
Éric Lévénez
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 -- Unix is not only an OS, it's a way of life.
Publicité
Poster une réponse
Anonyme