[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Commande find



On Sat, Jan 22, 2011 at 02:12:04PM +0100, Jeremie COURREGES-ANGLAS wrote:
> On Friday 21 January 2011 à 08:16:15AM, Fabien LUCE wrote:
> > Bonjour à tous!
> >
> >
> > 2 petites questions à propos de la commande find.
> >
> > 1) pourquoi find / -name "*test*" -mtime +7 -print0 ne se comporte pas comme find / -print0 -name "*test*" -mtime +7 ? En d'autres termes: le paramètre d'action print0 doit il toujours etre à la fin de la commande? Si oui, pourquoi?
> > 2) comment puis-je écrire: liste_fichier=$(find / -name "*test*" -mtime +7) sans être embêté par les noms de fichiers comprenant des espaces? le print0 est pas mal mais sans xargs derrière j'ai l'impression que c'est inutile...
> >
> > Merci, à bientôt!
> 
> Comme celà a été dit, il vaut mieux mettre -print0 à la fin des arguments
> passés à find. A part ça :
> * tu as parfaitement raison, on ne devrait jamais utiliser xargs sans -0
j'ai du le dire entre les lignes sans faire exprès car ce n'est pas ce que je pensais exprimer ;)



> * find a un xargs "builtin". Je m'explique :
> 
> $ find /foo -type f -bla -bla -exec ma commande {} \;
> 
> va exécuter "ma commande" pour chaque fichier trouvé. A noter qu'il n'y a pas
> de souci à se faire avec les noms de fichiers exotiques.
> 
> $ find /foo -type f -bla -bla -exec ma commande {} +

cela va executer la commande pour l'ensemble des fichiers si je comprend bien?

> 
> va lancer "ma commande" en lui passant un maximum de chemins en paramètre
> (comme xargs), toujours de manière sûre (quoiqu'on puisse préférer -execdir).
> En bonus, cette possibilité (le -exec ... +) est censé être standard.
> 
> S'il te plaît, ne cherches pas à mettre la sortie de find dans un tableau,
> si à jouer avec l'IFS et faire des trucs genre :
> $ for fichier in $liste_fichiers; do echo $fichier; done
> 
> Par contre, si tu n'as pas besoin d'un traitement récursif, ton shell suffit,
> pas besoin de find, juste de bash :
> 
> for fichier in ./*.[jJ][pP][gG]; do
>     [[ -f "$fichier" ]] || continue
>     if [[ "$fichier" = *.jpg ]]; then
>         echo "OK, fichier .jpg : $fichier"
>     else
>         echo mv "$fichier" "${fichier%.???}.jpg"
>     fi
> done
> 
> My two cents
> --
> "Free software, free society."
> Jérémie Courrèges-Anglas
> GPG key : 06A11494



-- 
Fabien LUCE
Jabber ID: ftg@lutix.org
Identi.ca: http://identi.ca/ftg
Web: www.lutix.org


Reply to: