Je cherche à faire une petite bricole pour copier des fichiers contenus dans
des répertoires.
Je voudrais copier tous les fichiers images contenus dans le
répertoire /var/toto/ (ainsi que ceux contenu dans ses sous
répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du
gif, png & jpg.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je
n'ai rien trouvé de concluant dans le man.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
talon
miterrandir wrote:
Bonjour,
Je cherche à faire une petite bricole pour copier des fichiers contenus dans des répertoires.
Je voudrais copier tous les fichiers images contenus dans le répertoire /var/toto/ (ainsi que ceux contenu dans ses sous répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du gif, png & jpg.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je n'ai rien trouvé de concluant dans le man.
Je suis prenneur de toute idée. Merci d'avance.
Ceci marche mais je n'aime pas: niobe% mkdir toto niobe% mkdir toto/a toto/b niobe% touch toto/a/c.jpg toto/d.png toto/b/e.gif niobe% cp `find toto -name '*.jpg' -or -name '*.png' -or -name '*.gif'` . niobe% rm c.jpg d.png e.gif
Apparemment utiliser -exec cp {} . ; ne marche pas.
--
Michel TALON
miterrandir <mit@mit.mi> wrote:
Bonjour,
Je cherche à faire une petite bricole pour copier des fichiers contenus dans
des répertoires.
Je voudrais copier tous les fichiers images contenus dans le
répertoire /var/toto/ (ainsi que ceux contenu dans ses sous
répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du
gif, png & jpg.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je
n'ai rien trouvé de concluant dans le man.
Je suis prenneur de toute idée.
Merci d'avance.
Ceci marche mais je n'aime pas:
niobe% mkdir toto
niobe% mkdir toto/a toto/b
niobe% touch toto/a/c.jpg toto/d.png toto/b/e.gif
niobe% cp `find toto -name '*.jpg' -or -name '*.png' -or -name '*.gif'` .
niobe% rm c.jpg d.png e.gif
Apparemment utiliser -exec cp {} . ;
ne marche pas.
Je cherche à faire une petite bricole pour copier des fichiers contenus dans des répertoires.
Je voudrais copier tous les fichiers images contenus dans le répertoire /var/toto/ (ainsi que ceux contenu dans ses sous répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du gif, png & jpg.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je n'ai rien trouvé de concluant dans le man.
Je suis prenneur de toute idée. Merci d'avance.
Ceci marche mais je n'aime pas: niobe% mkdir toto niobe% mkdir toto/a toto/b niobe% touch toto/a/c.jpg toto/d.png toto/b/e.gif niobe% cp `find toto -name '*.jpg' -or -name '*.png' -or -name '*.gif'` . niobe% rm c.jpg d.png e.gif
Apparemment utiliser -exec cp {} . ; ne marche pas.
--
Michel TALON
Marc
Michel Talon wrote:
Je voudrais copier tous les fichiers images contenus dans le répertoire /var/toto/ (ainsi que ceux contenu dans ses sous répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du gif, png & jpg.
Avec un shell qui aide (et en espérant qu'il n'y en ait pas trop) : cp /vat/toto/**/*.(gif|png|jpg) /var/titi Il y a de petites subtilités si on a des noms commençant par un '.'.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je n'ai rien trouvé de concluant dans le man.
Je suis prenneur de toute idée. Merci d'avance.
Ceci marche mais je n'aime pas: niobe% mkdir toto niobe% mkdir toto/a toto/b niobe% touch toto/a/c.jpg toto/d.png toto/b/e.gif niobe% cp `find toto -name '*.jpg' -or -name '*.png' -or -name '*.gif'` . niobe% rm c.jpg d.png e.gif
Apparemment utiliser -exec cp {} . ; ne marche pas.
-exec cp {} . + ne marche pas, mais la version avec ; marche. Peut-être un oubli de parenthèses ?
Michel Talon wrote:
Je voudrais copier tous les fichiers images contenus dans le
répertoire /var/toto/ (ainsi que ceux contenu dans ses sous
répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du
gif, png & jpg.
Avec un shell qui aide (et en espérant qu'il n'y en ait pas trop) :
cp /vat/toto/**/*.(gif|png|jpg) /var/titi
Il y a de petites subtilités si on a des noms commençant par un '.'.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je
n'ai rien trouvé de concluant dans le man.
Je suis prenneur de toute idée.
Merci d'avance.
Ceci marche mais je n'aime pas:
niobe% mkdir toto
niobe% mkdir toto/a toto/b
niobe% touch toto/a/c.jpg toto/d.png toto/b/e.gif
niobe% cp `find toto -name '*.jpg' -or -name '*.png' -or -name '*.gif'` .
niobe% rm c.jpg d.png e.gif
Apparemment utiliser -exec cp {} . ;
ne marche pas.
-exec cp {} . + ne marche pas, mais la version avec ; marche. Peut-être
un oubli de parenthèses ?
Je voudrais copier tous les fichiers images contenus dans le répertoire /var/toto/ (ainsi que ceux contenu dans ses sous répertoires : /var/toto/tata, /var/toto/tata/tutu) vers /var/titi. J'ai du gif, png & jpg.
Avec un shell qui aide (et en espérant qu'il n'y en ait pas trop) : cp /vat/toto/**/*.(gif|png|jpg) /var/titi Il y a de petites subtilités si on a des noms commençant par un '.'.
J'ai tenté de bricoler avec cp mais il copie également les répertoires et je n'ai rien trouvé de concluant dans le man.
Je suis prenneur de toute idée. Merci d'avance.
Ceci marche mais je n'aime pas: niobe% mkdir toto niobe% mkdir toto/a toto/b niobe% touch toto/a/c.jpg toto/d.png toto/b/e.gif niobe% cp `find toto -name '*.jpg' -or -name '*.png' -or -name '*.gif'` . niobe% rm c.jpg d.png e.gif
Apparemment utiliser -exec cp {} . ; ne marche pas.
-exec cp {} . + ne marche pas, mais la version avec ; marche. Peut-être un oubli de parenthèses ?
On peut aussi contourner le problème des parenthèses (nécessaire en raison des '-or') avec une boucle (fonctionne quelque soit le nombre de fichiers trouvés): % for foo in `find toto -name '*.jpg' -o -name '*.png' -o -name '*.gif'` ; do cp -v '{}' . ; done
On peut aussi contourner le problème des parenthèses (nécessaire
en raison des '-or') avec une boucle (fonctionne quelque soit le nombre
de fichiers trouvés):
% for foo in `find toto -name '*.jpg' -o -name '*.png' -o -name
'*.gif'` ; do
cp -v '{}' . ; done
On peut aussi contourner le problème des parenthèses (nécessaire en raison des '-or') avec une boucle (fonctionne quelque soit le nombre de fichiers trouvés): % for foo in `find toto -name '*.jpg' -o -name '*.png' -o -name '*.gif'` ; do cp -v '{}' . ; done
PS : un cp $(find ....) . est une aberration... autre PS : un cp /var/toto/**/* aussi si l'on ne précise pas que cela ne fonctionne que sous zsh.
pour en revenir à find -exec ... ; vs find ... -exec ... +, dans le 1er cas, il y a autant de cp que de fichiers, dans le 2nd, le nombre de commandes (cp) est limité à la xargs, différence qui n'est pas négligeable en temps d'exécution selon le nombre de fichiers. autrement dit, toujours privilégié -exec ... + ou | xargs si possible . dans le cas de cp, cpio est bien plus optimum.
PS : pb de xargs, si pas de fichier trouvé, au moins une exécution de la commande sans arguments, ce qui implique une erreur. attention aux commandes du type ls qui ne renvoie pas d'erreur si pas d'argument (je me suis fait avoir récemment :), ajoutez -d, dans le pir e des cas, . est retourné et non la liste des fichiers du répertoire courant... autre PS : dans les versions standard, find | xargs pose de serieux pb pour les fichiers avec des espace, etc. d'où l'utilisation la version GNU avec -print0 | xargs -0. alternative, simuler xargs par une boucle while/eval que je n'ai pas sous la main, désolé.
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Michel Talon wrote:
Apparemment utiliser -exec cp {} . ;
ne marche pas.
-exec cp {} . + ne marche pas, mais la version avec ; marche. Peut-êt re
un oubli de parenthèses ?
PS : un cp $(find ....) . est une aberration...
autre PS : un cp /var/toto/**/* aussi si l'on ne précise pas que cela
ne fonctionne que sous zsh.
pour en revenir à find -exec ... ; vs find ... -exec ... +,
dans le 1er cas, il y a autant de cp que de fichiers,
dans le 2nd, le nombre de commandes (cp) est limité à la xargs,
différence qui n'est pas négligeable en temps d'exécution
selon le nombre de fichiers.
autrement dit, toujours privilégié -exec ... + ou | xargs si possible .
dans le cas de cp, cpio est bien plus optimum.
PS : pb de xargs, si pas de fichier trouvé, au moins une exécution de
la commande sans arguments, ce qui implique une erreur.
attention aux commandes du type ls qui ne renvoie pas d'erreur si pas
d'argument (je me suis fait avoir récemment :), ajoutez -d, dans le pir e
des cas, . est retourné et non la liste des fichiers du répertoire
courant...
autre PS : dans les versions standard, find | xargs pose de serieux pb
pour les fichiers avec des espace, etc. d'où l'utilisation la version
GNU avec -print0 | xargs -0. alternative, simuler xargs par une boucle
while/eval que je n'ai pas sous la main, désolé.
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
PS : un cp $(find ....) . est une aberration... autre PS : un cp /var/toto/**/* aussi si l'on ne précise pas que cela ne fonctionne que sous zsh.
pour en revenir à find -exec ... ; vs find ... -exec ... +, dans le 1er cas, il y a autant de cp que de fichiers, dans le 2nd, le nombre de commandes (cp) est limité à la xargs, différence qui n'est pas négligeable en temps d'exécution selon le nombre de fichiers. autrement dit, toujours privilégié -exec ... + ou | xargs si possible . dans le cas de cp, cpio est bien plus optimum.
PS : pb de xargs, si pas de fichier trouvé, au moins une exécution de la commande sans arguments, ce qui implique une erreur. attention aux commandes du type ls qui ne renvoie pas d'erreur si pas d'argument (je me suis fait avoir récemment :), ajoutez -d, dans le pir e des cas, . est retourné et non la liste des fichiers du répertoire courant... autre PS : dans les versions standard, find | xargs pose de serieux pb pour les fichiers avec des espace, etc. d'où l'utilisation la version GNU avec -print0 | xargs -0. alternative, simuler xargs par une boucle while/eval que je n'ai pas sous la main, désolé.
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.