FIND - Unix

Fermé
Vesp' - 13 mars 2009 à 09:36
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 18 mars 2009 à 11:31
Bonjour,
J'ai fait quelques petites recherches sans réelle réponse (peut-être que je cherche mal), mais j'aurais voulu savoir s'il était possible de faire un find sur plusieurs fichiers genre

find /bidule -name toto.txt tata.jpg titi.doc (etc) -exec rm -f
A voir également:

7 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
13 mars 2009 à 20:07
Salut,
find /bidule \( -name 'toto.txt' -o -name 'tata.jpg' -o -name 'titi.doc' \) -exec ...
;-))
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 mars 2009 à 09:56
Re-

A vue de nez, deux ou trois petites choses...

#Sinon on lit le fichier
cat $1 | while read line
#On le parcourt ligne par ligne
do 
...
done < $1

C'est où l'une ou l'autre, mais pas les 2 !!!
Soit tu fais un cat sur le fichier et tu filtres les lignes au travers d'un pipe :
cat $1 | while ...
do
...
done
soit tu tu fais une boucle "while" :
while read line
#On le parcourt ligne par ligne
do 
...
done <$1

Ensuite concernant l'existence du fichier :
#On teste si le fichier existe
if [ ! -f $line ]; 
Faudrait peut être indiquer le chemin non ? ([ ! -f ${2}/${line} ])

Et pour finir dans tes suppressions de fichiers de log et d'erreur, il manque le "{}" :
find . -mtime +15 -name 'erreur*' -print -exec rm {} \;
find . -mtime +15 -name 'log*' -print -exec rm {} \;
;-))
1
Merci pour vos réponses (j'ai posté sans avoir fini mon message..)
@ bientot
0
Merci beaucoup !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alors j'ai pondu un script Shell qui recoit en parametres un fichier texte contenant une liste de fichier et un nom repertoire. l'idée c'est de parcourir le fichier texte et de supprimer les fichiers un à un. Le truc j'ai que j'ai pas le moyen de tester et j'voulais etre sur de pas avoir faire de fautes alors si vous en voyez Merci de mes les indiquer ! :)

#!/bin/bash
#$1 << .txt qui contient une liste de fichiers à supprimer
#$2 répertoire où se trouvent les fichiers à supprimer
#Creation d'un fichier d'erreurs
> erreur`date +%Y%m%d`.txt
#Creation d'un fichier de log
> log`date +%Y%m%d`.txt
# Test existence fichier
if [ ! -e $1 ]; then
#S'il n'existe pas
echo -e "Le fichier $1 n'existe pas ! \n"
#on sort
exit 2
else
#Sinon on lit le fichier
cat $1 | while read line
#On le parcourt ligne par ligne
do
#Pour chaque ligne on supprime le nom du fichier $ligne dans le répertoire indiqué
find $2 -name $line -exec rm -f {} \;
#On teste si le fichier existe
if [ ! -f $line ]; then
#S'il existe on écrit dans le fichier de log
echo "Le fichier" $line "a bien été supprimé" >> log.txt
#S'il n'existe pas
else
#On écrit dans le fichier d'erreur
echo "Une erreur est survenue pour le fichier" $line >> erreur.txt
#Jusqu'a la fin du fichier
done < $1
fi
#On supprime les fichiers d'erreur de plus de 15jours
find . -mtime +15 -name 'erreur*' -print -exec rm \;
#On supprime les fichiers de log de plus de 15jours
find . -mtime +15 -name 'log*' -print -exec rm \;
0
Merci pour ton aide jipicy !
Après correction, ça donne ça :

#!/bin/bash
#$1 << .txt qui contient une liste de fichiers à supprimer
#$2 répertoire où se trouvent les fichiers à supprimer
#Creation d'un fichier d'erreurs
> erreur`date +%Y%m%d-%kh%M `.txt
# Test existence fichier
if [ ! -e $1 ]; then
#S'il n'existe pas
echo -e "Le fichier $1 n'existe pas ! \n"
#on sort
exit 2
else
#Sinon on lit le fichier
while read line
#On le parcourt ligne par ligne
do
#Pour chaque ligne on supprime le nom du fichier $ligne dans le répertoire indiqué
find $2 -name $line -exec rm -f {} \;
#On teste si le fichier existe
if [ -f $2/$line ]; then
#On écrit dans le fichier d'erreur
echo "Une erreur est survenue pour le fichier" $line >> erreur.txt
fi
#Jusqu'a la fin du fichier
done < $1
fi
#On supprime les fichiers d'erreur de plus de 15jours
find . -mtime +15 -name 'erreur*' -print -exec rm {} \;

J'ai supprimé certaines choses (notamment le fichier de logs) qui me semblaient inutiles !

J'ai une derniere question pour

Faudrait peut être indiquer le chemin non ? ([ ! -f ${2}/${line} ])

les {} autour du nom du fichier et du chemin sont indispensables ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 mars 2009 à 11:05
Oui dans la mesure où il y a concaténation de variables, afin d'éviter toute ambigüité ou confusion possible...
0
Encore merci pour ton aide précieuse jipicy !
J'viens de faire mon premier script shell ! *Fiere* :D
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 mars 2009 à 11:31
Y'a pô d'quoi, bonne continuation ;-))
0