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

Comment rédiger un petit script...

16 réponses
Avatar
Gump
Ave et bonnes fêtes à tous,

qqun peut-il me dire comment écrire un script qui permettrait ( sous
Ubuntu ) d'effacer plusieurs dossiers avec une seule commande ?
Je n'ai aucune notion de programmation, on s'en doute... Je suppose
qu'il y aura un ou plusieurs rm -f /chemin du ou des dossiers...?

Précision : je ne souhaite pas effacer les dossiers mais seulement leur
contenu.

Merci,
Gump

10 réponses

1 2
Avatar
Arnaud LUQUIN
Gump wrote:
Ave et bonnes fêtes à tous,

qqun peut-il me dire comment écrire un script qui permettrait ( sous
Ubuntu ) d'effacer plusieurs dossiers avec une seule commande ?
Je n'ai aucune notion de programmation, on s'en doute... Je suppose
qu'il y aura un ou plusieurs rm -f /chemin du ou des dossiers...?

Précision : je ne souhaite pas effacer les dossiers mais seulement leur
contenu.


Quelle recherche veut tu faire ? Ou doit se limiter la recherche ? Est ce
statique ou pas ?

Bref, en bash entre for, find et rm tu dois pouvoir y arriver assez vite.

Birdy
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
Linus Torvalds - 1996

Avatar
Gump
|
| Quelle recherche veut tu faire ? Ou doit se limiter la recherche ? Est ce
| statique ou pas ?

Euh...hem...pardon mais je ne comprends pas. Je voudrais simplement, par
une seule commande, pouvoir vider de leur contenu des dossiers ou sous-dossiers,
par ex. /home/user/dossier1/sous_dossier
/home/user/dossier2/sous-dossier/sous_sous_dossier
/home/user/dossier3

etc... ( il y en aurait une dizaine )


|
| Bref, en bash entre for, find et rm tu dois pouvoir y arriver assez vite.
|

Je te crois sur parole ! mais j'en suis incapable.
D'où mon appel...

Gump
Avatar
Denis Leger
Le Sun, 23 Dec 2007 15:17:13 +0100,

|
| Quelle recherche veut tu faire ? Ou doit se limiter la recherche ?
Est ce | statique ou pas ?

Euh...hem...pardon mais je ne comprends pas. Je voudrais simplement,
par une seule commande, pouvoir vider de leur contenu des dossiers ou
sous-dossiers, par ex. /home/user/dossier1/sous_dossier
/home/user/dossier2/sous-dossier/sous_sous_dossier
/home/user/dossier3

etc... ( il y en aurait une dizaine )


|
| Bref, en bash entre for, find et rm tu dois pouvoir y arriver assez
vite. |

Je te crois sur parole ! mais j'en suis incapable.
D'où mon appel...


un truc du genre :

find . ! -type d -exec rm -f {} ;

devrait marcher, non ?

--
Denis Léger
MP Maths -- Brest

Avatar
Luc.Habert.00__arjf
"Gump" :

| find . ! -type d -exec rm -f {} ;

J'ai précisé que pour moi c'est du javanais ! où est-ce qu'on
indique les chemins des dossiers à vider ??
Merci mais sans un petit commentaire je ne peux rien faire



Find est un programme qui récurse à travers une arborescence de répertoires,
et en appliquant des actions aux fichiers vérifiants certains critères. En
l'occurence, cela se lit ainsi :

find . récurser sous le répertoire courant

! -type d sélectionner les fichiers autres que les
répertoires (le « ! » est une négation, et le
« -type d » sélectionne les répertoires)

-exec rm -f {} ; exécuter la commande « rm -f » sur chacun des
fichiers sélectionnés par le filtre ci-dessus
(le « {} » signifie que find doit insérer le
nom du fichier à cette place là dans la ligne
de commande, et le « ; » marque la fin de la
ligne de commande (il faut mettre un «  »
devant pour qu'il ne soit pas interprété par
le shell))

Avatar
Denis Beauregard
Le Sun, 23 Dec 2007 11:56:06 +0100, "Gump" écrivait
dans fr.comp.os.linux.configuration:

Ave et bonnes fêtes à tous,

qqun peut-il me dire comment écrire un script qui permettrait ( sous
Ubuntu ) d'effacer plusieurs dossiers avec une seule commande ?
Je n'ai aucune notion de programmation, on s'en doute... Je suppose
qu'il y aura un ou plusieurs rm -f /chemin du ou des dossiers...?

Précision : je ne souhaite pas effacer les dossiers mais seulement leur
contenu.


disons que tu veux effacer le contenu de /home/toto/dossier/ et
/home/toto/dossier1/

tu crées le fichier effacer
tu y copies

rm /home/toto/dossier/*
rm /home/toto/dossier1/*

et tu fais
chmod +x effacer

find permet de trouver des fichiers si on ne sait pas où ils se
trouvent, mais d'après tes commentaires, tu connais ces
emplacements.


Denis

--
0 Denis Beauregard -
// Les Français d'Amérique du Nord - www.francogene.com/genealogie--quebec/
| French in North America before 1722 - www.francogene.com/quebec--genealogy/
/ | Maintenant sur cédérom, début à 1770 (Version 2008)
oo oo Now on CD-ROM, beginnings to 1770 (2008 Release)

Avatar
Gump

Find est un programme qui récurse à travers une arborescence de
répertoires, et en appliquant des actions aux fichiers vérifiants
certains critères. En l'occurence, cela se lit ainsi :

find . récurser sous le répertoire courant

! -type d sélectionner les fichiers autres que les
répertoires (le « ! » est une négation, et
le « -type d » sélectionne les répertoires)

-exec rm -f {} ; exécuter la commande « rm -f » sur chacun
des
fichiers sélectionnés par le filtre
ci-dessus (le « {} » signifie que find doit
insérer le nom du fichier à cette place là
dans la ligne de commande, et le « ; »
marque la fin de la ligne de commande (il
faut mettre un «  » devant pour qu'il ne
soit pas interprété par le shell))



C'est sympa d'expliquer et ça m'apprend des choses. mais si je comprends
bien, il est impossible d'indiquer dans ce script plusieurs dossiers à
vider. Je dois à chaque fois me placer dans le répertoire à vider ( par
un cd ) pour exécuter ce fichier ! Autant utiliser rm, alors...

Avatar
Luc.Habert.00__arjf
Gump :

C'est sympa d'expliquer et ça m'apprend des choses. mais si je comprends
bien, il est impossible d'indiquer dans ce script plusieurs dossiers à
vider.


Il suffit de les mettre à la place du « . » dans la ligne de commande
donnée, séparés par des espaces.

Plus généralement, pour exécuter la même commande sur un ensemble de
strings, tu peux faire :

for f in liste des arguments ; do
commande à exécuter sur "$f"
done

en mettant « "$f" » dans la commande à l'endroit où substituer chacun des
éléments de la liste.

Avatar
Gump
C'est sympa d'expliquer et ça m'apprend des choses. mais si je
comprends bien, il est impossible d'indiquer dans ce script plusieurs
dossiers à vider.


Il suffit de les mettre à la place du « . » dans la ligne de commande
donnée, séparés par des espaces.


Je vais essayer.


Plus généralement, pour exécuter la même commande sur un ensemble de
strings, tu peux faire :

for f in liste des arguments ; do
commande à exécuter sur "$f"
done

en mettant « "$f" » dans la commande à l'endroit où substituer chacun
des éléments de la liste.


Oui, bon, là je suis largué !

Merci,
Gump


Avatar
Denis Leger
Le Sun, 23 Dec 2007 17:22:43 +0100,

| un truc du genre :
|
| find . ! -type d -exec rm -f {} ;
|
| devrait marcher, non ?
|

J'ai précisé que pour moi c'est du javanais ! où est-ce qu'on
indique les chemins des dossiers à vider ??


Tu remplaces le '.' après le find par le nom du dossier à vider (ou
alors tu te positionne dans ce dossier avec cd <nom du dossier>, la
commande va éliminer tous les fichiers contenus dans ce dossier et dans
les sous-dossiers qu'il contient, sans éliminer les sous-dossier. C'est
bience que tu voulais, non ?

Merci mais sans un petit commentaire je ne peux rien faire ( je sais,
je pourrais étudier les scripts bash, mais pour écrire 1 seul script,
j'hésite !)


Essaye quand même man find, c'est mieux pour comprendre...


--
Denis Léger
MP Maths -- Brest

Avatar
Gump

tu crées le fichier effacer
tu y copies

rm /home/toto/dossier/*
rm /home/toto/dossier1/*

et tu fais
chmod +x effacer




Merci, c'est ce qu'il me fallait ! fonctionne impec.

1 2