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

Les mystères de rm

9 réponses
Avatar
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

9 réponses

Avatar
yamo'
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

<http://pasdenom.info/fortune/>

La peur de l'ennui est la seule excuse au travail.
-+- Jules Renard -+-
Avatar
Erwan David
Yliur écrivait :

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é
Avatar
Fabien LE LEZ
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/*
Avatar
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.
Avatar
Fabien LE LEZ
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.
Avatar
yamo'
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

<http://pasdenom.info/fortune/>

Plus fait douceur que violence.
-+- Jean de La Fontaine (1621-1695),
Phébus et Borée (Fables VI.3) -+-
Avatar
Yliur
Le Tue, 05 Jul 2011 20:30:56 +0200
Fabien LE LEZ a écrit :

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.
Avatar
Sergio
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
Avatar
may5555
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é