script bash

Le
ppellero
Bonjour,

J'ai un site hébergé sur un serveur Linux et veux effacer dans un
répertoire tous les fichiers .jpg issus d'une webcam qui s'accumulent.
J'ai la possibilité de lancer une tache planifiée.
Je pensais à un fichier bash :
#!/bin/bash
rm -f *.jpg
Je suis novice sur Linux, est-ce que cela peut marcher?

Merci de votre attention.
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
olafkewl
Le #22455751
Le 09/08/2010 17:54, ppellero a écrit :
Bonjour,

J'ai un site hébergé sur un serveur Linux et veux effacer dans un
répertoire tous les fichiers .jpg issus d'une webcam qui s'accumulent.
J'ai la possibilité de lancer une tache planifiée.
Je pensais à un fichier bash :
#!/bin/bash
rm -f *.jpg
Je suis novice sur Linux, est-ce que cela peut marcher?

Merci de votre attention.



Dans une petite boucle :
for i in `find . -name "*.jpg"`
do
rm -f $i
done

Il faudra bien sur se placer dans le bon répertoire avant.
Si tu veux garder certaines images, tu peux aller voir du coté de find
et de ses option ctime / mtime
Il y a pas mal de littérature à ce propos sur le web.
Yliur
Le #22455941
Le Mon, 09 Aug 2010 17:54:48 +0200
ppellero
Bonjour,

J'ai un site hébergé sur un serveur Linux et veux effacer dans un
répertoire tous les fichiers .jpg issus d'une webcam qui s'accumulent.
J'ai la possibilité de lancer une tache planifiée.
Je pensais à un fichier bash :
#!/bin/bash
rm -f *.jpg
Je suis novice sur Linux, est-ce que cela peut marcher?

Merci de votre attention.




Attention au répertoire qui sera le répertoire courant au moment
d'exécuter ce script.
Yliur
Le #22455931
Le Mon, 09 Aug 2010 19:45:27 +0200
olafkewl
Le 09/08/2010 17:54, ppellero a écrit :
> Bonjour,
>
> J'ai un site hébergé sur un serveur Linux et veux effacer dans un
> répertoire tous les fichiers .jpg issus d'une webcam qui
> s'accumulent. J'ai la possibilité de lancer une tache planifiée.
> Je pensais à un fichier bash :
> #!/bin/bash
> rm -f *.jpg
> Je suis novice sur Linux, est-ce que cela peut marcher?
>
> Merci de votre attention.

Dans une petite boucle :
for i in `find . -name "*.jpg"`
do
rm -f $i
done



Quel est l'avantage de cette solution ?


Il faudra bien sur se placer dans le bon répertoire avant.
Si tu veux garder certaines images, tu peux aller voir du coté de
find et de ses option ctime / mtime
Il y a pas mal de littérature à ce propos sur le web.

Ericus
Le #22455921
Salut

c'est quoi l'avantage d'une boucle par rapport au rm *.jpg ?

à+
eric


Le 09/08/10 19:45, olafkewl a écrit :
Le 09/08/2010 17:54, ppellero a écrit :
Bonjour,

J'ai un site hébergé sur un serveur Linux et veux effacer dans un
répertoire tous les fichiers .jpg issus d'une webcam qui s'accumulent.
J'ai la possibilité de lancer une tache planifiée.
Je pensais à un fichier bash :
#!/bin/bash
rm -f *.jpg
Je suis novice sur Linux, est-ce que cela peut marcher?

Merci de votre attention.



Dans une petite boucle :
for i in `find . -name "*.jpg"`
do
rm -f $i
done

Il faudra bien sur se placer dans le bon répertoire avant.
Si tu veux garder certaines images, tu peux aller voir du coté de find
et de ses option ctime / mtime
Il y a pas mal de littérature à ce propos sur le web.

Damien Goutte-Gattat
Le #22456181
On Mon, 09 Aug 2010 21:04:16 +0200, Ericus wrote:
c'est quoi l'avantage d'une boucle par rapport au rm *.jpg ?



Le simple "rm *.jpg" présente un risque : s’il y a vraiment *beaucoup* de
fichiers, l’expansion du wildcard peut dépasser la taille maximale
autorisée pour une ligne de commande, produisant une erreur « Argument
list too long ».

La boucle proposée souffre du même problème et donc n’offre pas
d’avantage particulier par rapport au "rm *.jpg" (du moins à ma
connaissance), en revanche une boucle dans ce genre :

find . -name "*.jpg" | while read x
do
rm -f $x
done

contourne le problème.

Néanmoins dans ce cas précis, le but étant de supprimer les fichiers, le
plus simple me semble être l’option -delete de find, permettant de faire
directement :

find . -name "*.jpg" -delete
Nicolas George
Le #22456271
Damien Goutte-Gattat wrote in message
Le simple "rm *.jpg" présente un risque : s’il y a vraiment *beaucoup* de
fichiers, l’expansion du wildcard peut dépasser la taille maximale
autorisée pour une ligne de commande, produisant une erreur « Argument
list too long ».



Cette limite n'existe plus depuis Linux 2.6.23.

La boucle proposée souffre du même problème



Non, la liste n'est pas passée à travers l'exécution d'une commande externe.

et donc n’offre pas
d’avantage particulier par rapport au "rm *.jpg" (du moins à ma
connaissance), en revanche une boucle dans ce genre :
find . -name "*.jpg" | while read x
do
rm -f $x
done
contourne le problème.



Mais les deux se vautrent lamentablement quand il y a des espaces dans les
noms de fichiers. Ou n'importe quel caractère spécial, ici, puisque $x n'est
pas échappé.
Erwan David
Le #22456261
Damien Goutte-Gattat
On Mon, 09 Aug 2010 21:04:16 +0200, Ericus wrote:
c'est quoi l'avantage d'une boucle par rapport au rm *.jpg ?



Le simple "rm *.jpg" présente un risque : s’il y a vrai ment *beaucoup* de
fichiers, l’expansion du wildcard peut dépasser la taille ma ximale
autorisée pour une ligne de commande, produisant une erreur «  Argument
list too long ».

La boucle proposée souffre du même problème et donc n⠀™offre pas
d’avantage particulier par rapport au "rm *.jpg" (du moins à ma
connaissance), en revanche une boucle dans ce genre :

find . -name "*.jpg" | While read x
do
rm -f $x
done

contourne le problème.



Il y a nettemnt plus efficace avec
find . -name "*.jpg" |xargs rm -f

Mais il ne faut pas faire ça comme ça : là on va faire des r m des
répertoires appelés toto.jpg

Donc
find . -type f -name "*.jpg" |xargs rm -f

Mais il faut aussi tenir compte des espaces dans les noms de fichier,
donc
find . -type f -name "*.jpg" -print0 | xargs -0 rm -f

Mais si on a le gnu find (en général c'est le cas sous linux) on peut se
passer du xargs et faire

find . -type f -name "*.jpg" -exec rm -f {} +


Néanmoins dans ce cas précis, le but étant de supprimer le s fichiers, le
plus simple me semble être l’option -delete de find, permett ant de faire
directement :

find . -name "*.jpg" -delete



find . -type f -name "*.jpg" -delete
En vérifiant cependant que -delete est bien équivalent au rm -f p lutôt
qu'au rm.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Damien Goutte-Gattat
Le #22456571
On Mon, 09 Aug 2010 23:27:53 +0200, ppellero wrote:
#!/bin/bash
#rm *.jpg
find . -name "*.jpg" -delete

j'ai mis les droits à 777 au fichier "efface_jpg" et il est dans le
répertoire où se trouvent les .jpg. Il est lancé par une tache qui
s'exécute toutes les heures.



As-tu vérifié que le script s’exécutait dans le bon répertoire ? Au
besoin rends-toi dans le répertoire cible voulu avant le find. Ou bien
précise à find le chemin absolu vers ce répertoire, au lieu du .
signifiant le répertoire courant :

find /répertoire -name "*.jpg" -delete

Placer le script dans le répertoire où tu veux effacer les fichiers n’est
pas utile. Le répertoire courant ne dépend pas de l’emplacement du script.
Nicolas George
Le #22456561
Erwan David wrote in message
Mais si on a le gnu find (en général c'est le cas sous linux) on peut se
passer du xargs et faire
find . -type f -name "*.jpg" -exec rm -f {} +



Cette construction est dans la norme Unix, ce n'est pas spécifique à GNU
find. D'ailleurs, GNU find a plutôt été à la traîne pour l'avoir.
Erwan David
Le #22456831
Nicolas George
Erwan David wrote in message
Mais si on a le gnu find (en général c'est le cas sous linux) on peut se
passer du xargs et faire
find . -type f -name "*.jpg" -exec rm -f {} +



Cette construction est dans la norme Unix, ce n'est pas spécifique à GNU
find. D'ailleurs, GNU find a plutôt été à la traîne pour l'avoir.



Le + est GNU, avec un ; à la place c'est standard. Mais ça forque un rl
parfichier, alors que le +, comme le xargs va regrouper les fichiers
pour moins forker.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Publicité
Poster une réponse
Anonyme