Problème avec une commande shell ...

Résolu/Fermé
InfoBoss - 1 avril 2023 à 18:24
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 - 11 avril 2023 à 16:34

J'aimerais écrire une commande permettant de supprimer tous les liens (fichiers et répertoires) se trouvant sous une racine de fichiers donnée en paramètre sans utiliser la commande rm -r.

On m'a proposé cet exercice, mais j'arrive vraiment pas a savoir comment le faire sans la commande rm. Qqn pourrait m'aider ?

A voir également:

3 réponses

jee pee Messages postés 40454 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 novembre 2024 9 418
1 avril 2023 à 19:29

j'irais voir du coté de find, avec les paramètres -depth, pour traiter les fichiers avant le répertoire, et -exec pour la commande à exécuter .

Bien évidemment, utiliser rm dans un script récursif, c'est naturellement très dangereux si on se trompe quelque part.

Après l'énoncé ne parle pas de supprimer fichiers et répertoires, mais de supprimer les liens. On peut alors utiliser la commande unlink et find -type l pour trouver les liens


2
jee pee Messages postés 40454 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 novembre 2024 9 418
Modifié le 1 avril 2023 à 18:40
Salut, merci, bonjour, s'il vous-plait, etc ... sont des formules utiles, indispensables, dans la vie de tous les jours, et même sur un forum ;-)

Es-tu certain que l'interdiction concerne rm et pas juste rm -r, la commande récursive qui détruit toute une arborescence ? Car dans ce cas l'exercice consisterait à parcourir arborescence dans le script pour supprimer fichiers et répertoires.


0

oui c'est exactement ça, je veux le faire sans la commande rm-r en concret, est-ce  que vous avez des idées?

0
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 7 801
11 avril 2023 à 16:34

Bonjour,

En complément à la réponse de jee pee #3, je pense que la commande que tu cherches à écrire est :

find /mon/dossier -type l -exec unlink {} \;

Cela permet d'exécuter la commande écrite entre -exec et \; pour chaque fichier trouvé en substituant paire d'accolades par le nom du fichier trouvé courant.

Bonne chance

0