Commande find
Le
Fabien LUCE
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!
--
Fabien LUCE
Jabber ID: ftg@lutix.org
Identi.ca: http://identi.ca/ftg
Web: www.lutix.org
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20110121071614.GL7956@serveur.lutix.org
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!
--
Fabien LUCE
Jabber ID: ftg@lutix.org
Identi.ca: http://identi.ca/ftg
Web: www.lutix.org
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20110121071614.GL7956@serveur.lutix.org

Poser une question


utilise un tableau/liste :
array=( $(find / -name "*test*" -mtime +7) )
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Salut à toi !
Si
Le paramètre -print0 (ou -print, ou -ls) est considéré par find comme un
paramètre normal de son expression conditionnelle, si ce n'est qu'il est
toujours évalué à "vrai" -> tout est traité dans l'ordre où cela est écrit.
Donc si -print0 apparaît avant -mtime, les noms des fichiers sont affichés
avant que le filtre ne s'applique.
Ben avec un simple -print tu auras un nom de fichier par ligne, avec tous
tes espaces. Après tout dépend de la façon dont tu vas traiter le contenu
de la variable liste_fichier.
Sinon tu peux aussi prendre -print0, replacer le séparateur (caractère
NULL) par ce que tu veux et jouer avec IFS :
liste_fichier=$(find / -name "*test*" -mtime +7 | tr ' 00' '|')
IFS='|' ; for f in $liste_fichier ; do echo $f ; done
De rien et A+
Jean-Jacques
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Fabien LUCE écrivait:
Ce n'est pas spécialement un "paramètre d'action", c'est juste qu e find
prends les éléments les uns après les autres, et les év alue... En
l'occurence, print0 va renvoyer "true" tout le temps, donc tes fichiers
vont être tous listés.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Friday 21 January 2011 Ã 08:16:15AM, Fabien LUCE wrote:
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
* 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 {} +
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
--Pk6IbRAofICFmK5e
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (OpenBSD)
iQIcBAEBCAAGBQJNOtejAAoJEGGRj78GoRSUN+sQAIT67s/NhCmVSsr8/QUbUESJ
nZSmaPAZ8JtTVfEhLFShKl/bYWOqJcoc347ucqZ3LzndaYLa9/iUT9ze1RwK6L/3
FTBPGI9S1bRkHKBTdJ6UZ620DQA79CnI6+E03LMvTSoCoXJ4tYq35EdSv6kMdiKD
0T+yLbgM4M5wm+Hjmxu7EEZ8LgCpCgYJDgZBTivRAKzbTlUlp3z7ndujMKmOSF8F
18dUkR42IltiU5bkm0fuf5IofUVrUz0KE3Yr1u9n8fpkFOUd0sGJLYCqRpisueBe
OpgSMnkIotIvlDy2h+PYwO4YoPGPRMQ0IMmFevC8lhRKuHicZutpmB5yWJ5XpyxK
U8lvcHKQ7aY2vmtJQoWmRldXP11SORNd9aONaqQZuQJpaoib94QxRukJypjA4hB2
o8VlEPF7FFkO5VaOy4W73bsgwyZy92MTs1XYCk73USSuiJSQz4vdQp3bRXCzMqH7
ZKglXCMG5EswYkSSifoHRHSVfcuiqf69kdQ1kRwowEWMA0nroOddJsVqqNnoxB7P
vHM+t5utIzKahOyi9XOOC95ZxVkrP2n+20HMpIWsnIY/KsFFPYLyJJeVOFMzGVlr
A1oDNdY2a2lsHkiKZ/kU+0ho5wa1J94riNjsbe13AQ6DaFsRhhYIIikyUDSxgj8m
lLmkl7mL/1YP9m2UGSDe
=BPWR
-----END PGP SIGNATURE-----
--Pk6IbRAofICFmK5e--
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
j'ai du le dire entre les lignes sans faire exprès car ce n'est pas ce que je pensais exprimer ;)
cela va executer la commande pour l'ensemble des fichiers si je comprend bien?
--
Fabien LUCE
Jabber ID:
Identi.ca: http://identi.ca/ftg
Web: www.lutix.org
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/