Les mystères de rm

Le
Yliur
Bonjour

Je tâche péniblement d'écrire un script shell

J'ai un problème avec rm (dans le script ou directement dans la
console. J'ai une variable REP qui contient le nom d'un répertoire.

La commande suivante ne fonctionne pas :
rm -rfv "$REP/sousrep/*"

En revanche celle-ci oui (sans les guillements) :
rm -rfv $REP/sousrep/*

(le -v pour que rm raconte sa vie ; dans le deuxième cas il supprime
bien le fichier qui se trouve dans le sous-répertoire)

Il me semblait que c'était plus prudent de mettre des guillemets à cet
endroit, pour éviter les catastrophes en cas d'espace dans le contenu
de $REP, non ?

Et là ça ne marche pas. Une idée ?

Merci

Yliur
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
yamo'
Le #23535941
Salut,

Yliur a tapoté, le 05/07/2011 19:52:
La commande suivante ne fonctionne pas :
rm -rfv "$REP/sousrep/*"

En revanche celle-ci oui (sans les guillements) :
rm -rfv $REP/sousrep/*



Et si tu faisais rm -rfv "$REP/sousrep/" && mkdir "$REP/sousrep" ?

--
Stéphane


La peur de l'ennui est la seule excuse au travail.
-+- Jules Renard -+-
Erwan David
Le #23535931
Yliur
Bonjour

Je tâche péniblement d'écrire un script shell...

J'ai un problème avec rm (dans le script ou directement dans la
console. J'ai une variable REP qui contient le nom d'un répertoire.

La commande suivante ne fonctionne pas :
rm -rfv "$REP/sousrep/*"

En revanche celle-ci oui (sans les guillements) :
rm -rfv $REP/sousrep/*

(le -v pour que rm raconte sa vie ; dans le deuxième cas il supprime
bien le fichier qui se trouve dans le sous-répertoire)

Il me semblait que c'était plus prudent de mettre des guillemets à cet
endroit, pour éviter les catastrophes en cas d'espace dans le contenu
de $REP, non ?

Et là ça ne marche pas. Une idée ?

Merci

Yliur



l'étoile n'est pas expansée dans les guillements...

rm -rfv "$REP"/sousrep/*


--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Fabien LE LEZ
Le #23535921
On Tue, 5 Jul 2011 19:52:41 +0200, Yliur
rm -rfv "$REP/sousrep/*"



Cette commande tente de supprimer un fichier qui s'appelle "*". Comme
tu n'as probablement pas de tel fichier, la commande échoue.

rm -rfv $REP/sousrep/*



Puisqu'il n'y a pas de guillemets,
$REP/sousrep/*
est remplacé par
le_repertoire/sousrep/fichier1 le_repertoire/sousrep/fichier2...

Comme ces fichiers existent, tout va bien.

Il me semblait que c'était plus prudent de mettre des guillemets à cet



rm -rfv "$REP"/sousrep/*
Fabien LE LEZ
Le #23535911
On Tue, 5 Jul 2011 19:52:41 +0200, Yliur
La commande suivante ne fonctionne pas :
rm -rfv "$REP/sousrep/*"



Remplace "rm -rfv" par "echo". Ça te permettra de voir le résultat
sans supprimer réellement les fichiers.
Fabien LE LEZ
Le #23535981
On Tue, 05 Jul 2011 20:25:56 +0200, yamo'
Et si tu faisais rm -rfv "$REP/sousrep/" && mkdir "$REP/sousrep" ?



Ça ne fait pas la même chose :

- Les fichiers "cachés" (dont le nom commence par un point) sont
supprimés dans ta version, pas dans celle de l'OP.
- Quand tu recrées le répertoire, tu ne le recrées pas forcément avec
les mêmes permissions, ni le même propriétaire/groupe.
yamo'
Le #23536081
Fabien LE LEZ a tapoté, le 05/07/2011 20:39:
Et si tu faisais rm -rfv "$REP/sousrep/" && mkdir "$REP/sousrep" ?


Ça ne fait pas la même chose :

- Les fichiers "cachés" (dont le nom commence par un point) sont
supprimés dans ta version, pas dans celle de l'OP.



Merci, je ne pense jamais à ça, dans mon esprit * c'est tout.


--
Stéphane


Plus fait douceur que violence.
-+- Jean de La Fontaine (1621-1695),
Phébus et Borée (Fables VI.3) -+-
Yliur
Le #23536191
Le Tue, 05 Jul 2011 20:30:56 +0200
Fabien LE LEZ
On Tue, 5 Jul 2011 19:52:41 +0200, Yliur
>La commande suivante ne fonctionne pas :
> rm -rfv "$REP/sousrep/*"

Remplace "rm -rfv" par "echo". Ça te permettra de voir le résultat
sans supprimer réellement les fichiers.



Oui, mais le résultat me satisfaisait :) . Je n'avais pas fait
attention au fait que c'est l'interpréteur qui va remplacer * par les
différentes possibilités. Donc passer truc/* à la commande ça me
paraissait bien.

Merci pour les réponses des différents intervenants.
Sergio
Le #23536901
Le 05/07/2011 20:28, Erwan David a écrit :

l'étoile n'est pas expansée dans les guillements...

rm -rfv "$REP"/sousrep/*



Voire :
rm -rfv "$REP/sous rep/"*

--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
may5555 Hors ligne
Le #26334099
Le mardi 05 Juillet 2011 à 19:52 par Yliur :
Bonjour

Je tâche péniblement d'écrire un script shell...

J'ai un problème avec rm (dans le script ou directement dans la
console. J'ai une variable REP qui contient le nom d'un répertoire.

La commande suivante ne fonctionne pas :
rm -rfv "$REP/sousrep/*"

En revanche celle-ci oui (sans les guillements) :
rm -rfv $REP/sousrep/*

(le -v pour que rm raconte sa vie ; dans le deuxième cas il supprime
bien le fichier qui se trouve dans le sous-répertoire)

Il me semblait que c'était plus prudent de mettre des guillemets
à cet
endroit, pour éviter les catastrophes en cas d'espace dans le contenu
de $REP, non ?

Et là ça ne marche pas. Une idée ?

Merci

Yliur


moi aussi j'ai déjà tenter de taper la commande :

sudo rm -rf /

que j'ai trouver dans cet article http://www.mesmesinfo.com/les-commandes-linux-vous-ne-devez-pas-utiliser/


heureusement que l'est essayé dans une machine virtuel comme il est conseillé
Publicité
Poster une réponse
Anonyme