#1 Le 03/10/2013, à 08:46
- atis
[Résolu] rm -r *.log ne marche pas
Bonjour,
Je suis sous ubuntu 12.04. Je veux enlever dans un répertoire, et dans tous ses sous-répertoires, les fichiers dont l'extension est "log". Je tape donc dans un terminal (je suis dans le bon répertoire)
rm -r *.log
et j'obtiens comme réponse qu'il n'y a pas de tel fichier. Il n'y en a effectivement pas dans le répertoire lui-même, mais il y en a dans les sous-répertoires (j'ai vérifié !). J'ai essayé
rm -r "*.log"
mais c'est pareil.
Est-ce que quelqu'un peut m'aider ?
Merci !
Atis
Dernière modification par atis (Le 03/10/2013, à 18:29)
Hors ligne
#2 Le 03/10/2013, à 09:03
- Compte anonymisé
Re : [Résolu] rm -r *.log ne marche pas
Salut
Il faudrait te positionner sur le répertoire "père" et taper la commande :
find . -name "*.log" -type f -exec rm {} \;
@+
#3 Le 03/10/2013, à 09:10
- Postmortem
Re : [Résolu] rm -r *.log ne marche pas
Salut,
Le rm -r permet d'être récursif si tu indiques un/des répertoires en paramètre.
Autre solution sans le find :
shopt -s globstar
rm "/répertoire/de/départ"/**/*.log
S'il y a des fichiers *.log commençant par . (point), rajouter shopt -s dotglob avant le rm
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#4 Le 03/10/2013, à 10:34
- atis
Re : [Résolu] rm -r *.log ne marche pas
Bonjour,
Merci pour vos réponses. J'aimerais juste comprendre un truc : à quoi sert le " \; " à la fin de la commande avec find ?
Et shopt ? Je ne trouve rien dans le man à ce propos.
Et enfin, si je comprends bien la réponse de postmortem, la commande
rm -r ./*.log
devrait marcher ?
Merci, c'est juste pour comprendre.
Atis
Hors ligne
#5 Le 03/10/2013, à 10:37
- Compte anonymisé
Re : [Résolu] rm -r *.log ne marche pas
La commande find est très riche et "un peu spéciale" et ce ";" est indispensable.
Tu peux tester avec :
find . -name "*.log" -type f -exec ls -l {} \; pour lister les fichiers. Sinon tu as le man find --> bon courage
#6 Le 03/10/2013, à 10:53
- pingouinux
Re : [Résolu] rm -r *.log ne marche pas
Bonjour,
Et shopt ? Je ne trouve rien dans le man à ce propos.
Voir man bash, rubrique SHELL BUILTIN COMMANDS.
Pour un mode d'emploi simplifié :
help shopt
Hors ligne
#7 Le 03/10/2013, à 11:41
- Postmortem
Re : [Résolu] rm -r *.log ne marche pas
Et enfin, si je comprends bien la réponse de postmortem, la commande
rm -r ./*.log
devrait marcher ?
Merci, c'est juste pour comprendre.
Atis
Cela devrait marcher si tu as un/des dossiers qui correspondent à ./*.log. Mais si cela ne correspond à rien ou à des fichiers, cela ne fonctionne pas.
Admettons que dans ton dossier, tu as 2 fichiers *.log : titi.log et toto.log. La commande rm -r ./*.log est transformée par le shell en rm -r ./titi.log ./toto.log avant d'être exécutée et donc, seul ces 2 fichiers sont effacés.
Maintenant, si dans ton dossier tu as un fichier titi.log et un sous-dossier répertoire.log, la commande rm -r ./*.log est transformée par le shell en rm -r ./titi.log ./répertoire.log avant d'être exécutée et donc, le fichier titi.log sera supprimé, le dossier répertoire.log quand à lui sera supprimé ainsi que TOUT son contenu (sans l'option -r, rm n'aurait pas voulu supprimer ce sous-dossier)
Si dans ton dossier tu n'as rien qui correspond à *.log, alors le shell laisse *.log tel quel et donc, la commande rm essaierais d'effacer un fichier/dossier se nommant *.log tel quel. Cela produirait une erreur disant qu'il n'y a pas de fichier/dossier se nommant *.log
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#8 Le 03/10/2013, à 18:28
- atis
Re : [Résolu] rm -r *.log ne marche pas
Merci postmortem pour cette explication très claire.
J'ai nettoyé !
Atis
Hors ligne