|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Bonjour à tous
Alors, je cherche à récupérer les fichiers images d'un dossier (qui est mise à jour automatiquement) par leur extension (ça pas de soucis) puis je cherche à les copier dans un dossier ou un script php d'un site s'occupe d'eux (renommage et création d'un fichier xml). Le souci c'est que vu que le script PHP les renomme, quand je relance ma copie il les remet et le script les renomme et ainsi de suite. J'ai donc tenté d'utiliser la commande --backup d'rsync avec un dossier --backup-dir définie, mais cela ne fonctionne toujours pas, il continue de renvoyer les fichier dans le dossier de backup malgré leurs présence dans le dossier 'incremental'. Pas mal de personne m'ont aidé avec Rsync mais je pense être bloqué et surtout je ne suis pas sur qu'Rsync soit la bonne solution. Voici mon code initial, mais bon il ne fonctionne pas comme je le veux et je pense qu'il faut partir sur quelque chose de différent: un script qui permet de copier des fichiers (ou pas) en fonction d'un historique annexe. Code :
Merci d'avance pour votre aide. PS; un ptit plus serait de remplacer les points par un espace juste après avoir copié les *.jpeg. Mon script a du mal à différencier les deux. Je pensais refaire une commande find et chercher les fichiers puis leur faire sauter leurs point avec 'sed'? |
||
|
|
01
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : août 2009 Messages : 152 ![]() |
Perso je referais l'ensemble dans un shell "basique" :
Code :
Pour ton problème de "." et de sed je n'ai pas bien saisi ce que tu veux faire. |
||
|
|
20
|
|
|
#3 | |||
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Citation:
Pour le "PS" en faite, mon script php considère que ce qui est après le point est l'extension, et quand il y a deux points dans le nom complet du fichier ça fonctionne pas très bien. Je me demandais si je pouvais pas rajouter une fonction pour remplacer le point par un espace. Par contre, il faudrait qu'elle agisse après la copie dans le dossier de destination? |
|||
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour,
un shell, même basique, ne fait pas for element in $(commande). Imagine que commande sorte des éléments contenant des espaces (ou pire, comme il est dit), alors la boucle for itérera sur chacune des composantes de chaque élément. Et là, patatra ! |
|
|
20
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Aïe, que dois je faire du coup..? :/
|
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Citation:
Code :
find "$rep" […] -exec sh -c 'commandes_SH' {} {} \; |
|
|
|
20
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
ce n'est pas le shell qui itère sur la sortie de find, c'est find qui itère les commandes shell pour chaque fichier.
|
|
|
20
|
|
|
#9 |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
|
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : août 2009 Messages : 152 ![]() |
Ben, si, le ksh gère ça en natif directement, Unix/Linux etc... ?!? $(commande) est exécuté, tu récupère une liste de chaines de caractères, et le for boucle dessus.
Sinon, le problème des espaces est vrai. Si tes fichiers contiennent des espaces, le for va séparer sur les espaces, donc un fichier "image meteo.jpg" va déclencher deux fois la boucle, une sur "image" et une sur "meteo.jpg". Pour gérer ce cas là, il faut à nouveau tout revoir, soit avec find, soit avec un while. Pour le find, l'option "-exec" permet d'exécuter une commande sur chaque résultat que le find a trouvé. Dans cette syntaxe "{}" représente ton résultat, et "\;" la fin de la commande shell à exécuter. Faut que j'essaye, j'ai jamais utilisé find sur des commandes plus complexe qu'un rm par exemple. |
|
|
20
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
oui, je me suis mal exprimé :
Citation:
|
|
|
|
30
|
|
|
#12 | ||
|
Membre actif
![]() Inscription : août 2009 Messages : 152 ![]() |
Dans ce cas je suis d'accord, la méthode for i in $(commande) est en effet trop simple pour gérer les espaces dans les résultats !
Je n'arrive pas à faire une version avec find qui lancerait une fonction ou plusieurs commandes. Une version avec while, qui gère les espaces dans les noms de fichier : Code :
Autour des commandes mv ou cp, il faut aussi du coup encapsuler tes arguments dans des guillemets pour que le shell interprète "image avec un blanc.jpg" comme un seul argument et non comme 4 arguments distincts. exec permet d'ouvrir et de fermer proprement des filedescripteurs. |
||
|
|
10
|
|
|
#13 |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Merci bien. J'y vois petit à petit de plus en plus clair.
J'essaye tout cela. |
|
|
00
|
|
|
#14 | ||||
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Malheureusement je rencontre un message d'erreur à propos du tmp.file
Même si je créé un fichier ou un dossier nommé tmp.file cela ne fonctionne pas... Code :
Code :
|
||||
|
|
00
|
|
|
#15 |
|
Membre actif
![]() Inscription : août 2009 Messages : 152 ![]() |
Vérifie que HIST_DIR pointe sur /media/NewVolume/History/ et non pas ./media/NewVolume/History/ ou media/NewVolume/History/
Ton répertoire doit être mal paramétré. |
|
|
00
|
|
|
#16 | ||||
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Merci beaucoup le script fonctionne pour le moment, malgré le fait que les fichiers du dossier média disparaissent.
J'ai donc fait une modif ligne 13. Code :
En utilisant ceci Code :
Merci encore Je peux difficilement masquer ma joie. |
||||
|
|
00
|
|
|
#17 | ||
|
Invité de passage
![]() Inscription : juin 2010 Messages : 10 ![]() |
Hello
Bon je suis partie d'un script un peu "assisté" pour arriver à mes fins. Code :
Puis je utiliser le path de la ligne 12 avec le $DEST_DIR que j'utilise précédement dans mon script et lui spécifier de suite l'extension. J'ai du mal à trouver. Pour j'appelle l'ouvre mon dossier puis appel mon script suivis de l’extension *.jpeg Dernière question, puis-je intégrer ce code en brut dans un script en ksh. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com