Comment rédiger un petit script...

Le
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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Arnaud LUQUIN
Le #1909908
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

Gump
Le #1909903
|
| 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
Denis Leger
Le #1909902
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

Luc.Habert.00__arjf
Le #1909901
"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))

Denis Beauregard
Le #1909900
Le Sun, 23 Dec 2007 11:56:06 +0100, "Gump" 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)

Gump
Le #1909899

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...

Luc.Habert.00__arjf
Le #1909898
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.

Gump
Le #1909897
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


Denis Leger
Le #1909896
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

Gump
Le #1909889

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.

Publicité
Poster une réponse
Anonyme