Bonjour Gil, merci encore pour ton aide mais visiblement cela ne fonctionne pas non plus, il semble que l'option -I de xargs ne soit pas disponible, j'ai juste 4 options dispo : -r -x -0 et -t dans mon shell…
Tu as passé un certain temps à m'aider et je t'en remercie vivement ainsi que Benja.
J'opte finalement pour le script et la solution "un peu crade" que tu m'as donnée ci dessous avec un script "un peu crade aussi" je suppose vu mon niveau mais au moins ca marche et ca me suffit !
#!/bin/sh
read -p "entrer repertoire de recherche dans data2/D/ sous forme 'AA_MM_*' :" rep
read -p "entrer repertoire cible a creer dans /data2_export/ 'DOSSIER' :" cible
read -p "entrer nom fichier recherchés 'fichier.ext ou *' :" fich
repcible="/share/data2_export/"ScibleS"/"
echo $repcible
mkdir "$repcible"
/opt/bin/find /share/data2/D/ -maxdepth 1 -type d -name "$rep" -exec /opt/bin/find {} -name "$fich" > "Srepcible"S"liste.txt" \;
resultat="Srepcible"S"liste.txt"
cat $resultat
nb=$(wc -l < $resultat)
echo SnbS" fichiers trouvés"
read -p "Extraire ces fichiers ? appuyer sur 'o' ou 'n' " reponse
if [ "$reponse" = "n" ]; then exit
fi
if [ "$reponse" = "o" ]; then
while IFS= read -r line <&3; do
rsync -aR "$line" "$repcible"
done 3< "Srepcible"S"liste.txt"
fi
NB : j'ai mis des "S" à la place de certains "$" pour ce post sinon c'était illisible
Indirection ? je découvre un mot ! mais d'après ce que j'ai lu ce serait une sorte de numéro (Inode ?) de classement unique à chaque fichier ou dossier.
L'idée étant de se servir de ces inodes pour appliquer la commande Rsync.
Visiblement Xargs réinjecte bien les données d'entrées de la commande simple ls mais dès que la commande est un peu plus complexe telle que rsync qui demande une source et une destination, j'ai l'impression que cela ne fonctionne pas.
CSearch for files in a directory hierarchy. The default PATH is
the current directory; default EXPRESSION is '-print'`
Pour lui le Path avec $ n'est pas reconnu visiblement.
Entre temps j'ai essayé avec print0 et xargs -0 sans succès, je dois mal m'y prendre ou alors la limitation du bash fait que ca ne marche pas , j'ai essayé la commande suivante et d'autres variantes : /opt/bin/find . -maxdepth 1 -type d -name "22_11_*" -exec /opt/bin/find {} -name "7964*.vce" -print0 \; | xargs -0 rsync -aR "/share/data2_export/7964/"
j'ai le message de retour suivant :
'ERROR: destination must be a directory when copying more than 1 file
rsync error: errors selecting input/output files, dirs (code 3) at main.c(788) [Receiver=3.0.7]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]'
J'arrive à stocker les résultats de la commande suivante dans un fichier liste.txt dans lequel la liste des fichiers à copier est correcte mais je ne parviens pas via Rsync à ce qu'il reprenne le contenu de cette liste qui pourrait être une solution.
Vu ma réponse précédente, il semble donc que mon langage soit du bash avec des commandes limitées.
et la commande find ci dessous imbriquée avec le $ ne semble pas fonctionner ni celle avec -wholename
find $(find /share/data/D2 -type d -maxdepth 1 -name 22_11\*)
Pour rappel la commande suivante fonctionne bien mais pour ressortir 8 fichiers d'un total de quelques Mo, cela prend presque 15mn d’où mon besoin de cibler sur certains dossiers (commençant par "22_11_*" dans lesquels rechercher avec -maxdepth 1 )
la commande rsync fait donc bien ce qui est demandé, c'est juste que je n'arrive pas à lui mettre les données restreintes de 2 commandes find enchainées.
Comme dit avant la piste du print -0 et du xargs -0 devrait marcher.
Merci encore Gil pour tes explications, effectivement je ne suis pas un pro du tout dans ce domaine, je ne connais pas bien la différence entre unix, linux…, je suis un utilisateur windows et MS-DOS à la base, bref un user de base mais je vois bien toute la puissance possible des commandes Linux ou Bash visiblement (je l'ignorais)
La commande type rsync me renvoie rsync is /usr/bin/rsync
La commande command -v rsync me renvoie /usr/bin/rsync
Le déballage de BusyBox a été fait dans ce répertoire /opt/bin > réponse oui !
Je vais creuser avec les options -print0 et xargs -0.
Un ami m'avait fait des scripts il y a quelques années et il s'était pris la tête avec cette limitation des commandes en Bash donc.
Un extrait de ce script fonctionne ci dessous par exemple
/opt/bin/find /share/data/* -type f -mmin -60 -print0| xargs -0 tar cf - |
J'ai testé et en gros rien ne fonctionne en l'état. Je pense que cela vient de mon "linux".
Je suis sur un NAS Qnap TS 219 installé depuis quelques années déjà mais qui tourne toujours bien pour mes besoins.
Après réflexion, je me souviens qu'il manquait pas mal d'options dans les commandes find par exemple et j'ai du, avec l'aide d'un ami, installer des package IPKG pour obtenir les options complémentaires de find et de Xargs qui ne fonctionnaient pas de base.
Il semblerait que j'ai un linux basic light d'installé et c'est surement pour cela que les options de rsync --files-from= ne fonctionne pas je pense.
C'est la raison pour laquelle je dois chercher la commande find via /opt/bin/find qui a été ajoutée à cet endroit pour pouvoir disposer de toutes les options.
Concernant les options installées, je suis incompétent pour refaire ce que mon ami avait fait à l'époque. Ce que je vois dans /opt/bin/find ce sont les commandes supplémentaires installées par exemple find@ et xargs@ mais je ne vois pas de rsync@ installé, ce pourquoi je ne dispose pas des options un peu poussées mais on s'éloigne du sujet..Je vais me rapprocher de mon ami pour savoir s'il peut m'aider sur ce point d'installation afin que la commande rsync puisse fonctionner avec les options.
[^] # Re: pistes
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 1.
Merci Gil pour ces infos précieuses
[^] # Re: pistes
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 1.
Bonjour Gil, merci encore pour ton aide mais visiblement cela ne fonctionne pas non plus, il semble que l'option -I de xargs ne soit pas disponible, j'ai juste 4 options dispo : -r -x -0 et -t dans mon shell…
Tu as passé un certain temps à m'aider et je t'en remercie vivement ainsi que Benja.
J'opte finalement pour le script et la solution "un peu crade" que tu m'as donnée ci dessous avec un script "un peu crade aussi" je suppose vu mon niveau mais au moins ca marche et ca me suffit !
#!/bin/sh
read -p "entrer repertoire de recherche dans data2/D/ sous forme 'AA_MM_*' :" rep
read -p "entrer repertoire cible a creer dans /data2_export/ 'DOSSIER' :" cible
read -p "entrer nom fichier recherchés 'fichier.ext ou *' :" fich
repcible="/share/data2_export/"ScibleS"/"
echo $repcible
mkdir "$repcible"
/opt/bin/find /share/data2/D/ -maxdepth 1 -type d -name "$rep" -exec /opt/bin/find {} -name "$fich" > "Srepcible"S"liste.txt" \;
resultat="Srepcible"S"liste.txt"
cat $resultat
nb=$(wc -l < $resultat)
echo SnbS" fichiers trouvés"
read -p "Extraire ces fichiers ? appuyer sur 'o' ou 'n' " reponse
if [ "$reponse" = "n" ]; then exit
fi
if [ "$reponse" = "o" ]; then
while IFS= read -r line <&3; do
rsync -aR "$line" "$repcible"
done 3< "Srepcible"S"liste.txt"
fi
NB : j'ai mis des "S" à la place de certains "$" pour ce post sinon c'était illisible
bref un GRAND MERCI A VOUS DEUX !
[^] # Re: questions
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 1.
Indirection ? je découvre un mot ! mais d'après ce que j'ai lu ce serait une sorte de numéro (Inode ?) de classement unique à chaque fichier ou dossier.
L'idée étant de se servir de ces inodes pour appliquer la commande Rsync.
j'ai testé la commande suivante
[/share/data2/D] # /opt/bin/find . -maxdepth 1 -type d -name "22_11_*" -exec /opt/bin/find {} -name "7964.vce" -print0 \;| xargs -0 ls -li
qui me retourne bien la liste des mes fichiers avec les inodes en début de ligne :
75932330 -rwxr-x--- 1 francois everyone 274638 Nov 2 08:59 ./22_11_02/backup_22_11_02_09h00/share/archives/TBC/Save_VCE_Disque Ext/7964_Saint_André/7964.vce
84369674 -rwxr-x--- 1 francois everyone 277122 Nov 2 10:35 ./22_11_02/backup_22_11_02_11h00/share/archives/TBC/Save_VCE_Disque Ext/7964_Saint_André/7964.vce
Visiblement Xargs réinjecte bien les données d'entrées de la commande simple ls mais dès que la commande est un peu plus complexe telle que rsync qui demande une source et une destination, j'ai l'impression que cela ne fonctionne pas.
[^] # Re: pistes
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 1.
Bonjour Gil
echo $SHELL
renvoit/bin/sh
La commande
find $(find /share/data2/D -type d -maxdepth 1 -name 22_11\*) -type f -name 7964.vce
me renvoit le massage ci dessousBusyBox v1.01 (2013.04.25-18:11+0000) multi-call binary
Usage: find [PATH...] [EXPRESSION]
CSearch for files in a directory hierarchy. The default PATH is
the current directory; default EXPRESSION is '-print'`
Pour lui le Path avec $ n'est pas reconnu visiblement.
Entre temps j'ai essayé avec print0 et xargs -0 sans succès, je dois mal m'y prendre ou alors la limitation du bash fait que ca ne marche pas , j'ai essayé la commande suivante et d'autres variantes :
/opt/bin/find . -maxdepth 1 -type d -name "22_11_*" -exec /opt/bin/find {} -name "7964*.vce" -print0 \; | xargs -0 rsync -aR "/share/data2_export/7964/"
j'ai le message de retour suivant :
'ERROR: destination must be a directory when copying more than 1 file
rsync error: errors selecting input/output files, dirs (code 3) at main.c(788) [Receiver=3.0.7]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]'
J'arrive à stocker les résultats de la commande suivante dans un fichier liste.txt dans lequel la liste des fichiers à copier est correcte mais je ne parviens pas via Rsync à ce qu'il reprenne le contenu de cette liste qui pourrait être une solution.
/opt/bin/find . -maxdepth 1 -type d -name "22_11_*" -exec /opt/bin/find {} -name "7964.vce" > liste.txt \;
[^] # Re: pistes
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 1.
Merci à toi Benja pour ces très bonnes pistes !
Vu ma réponse précédente, il semble donc que mon langage soit du bash avec des commandes limitées.
et la commande find ci dessous imbriquée avec le
$
ne semble pas fonctionner ni celle avec-wholename
find $(find /share/data/D2 -type d -maxdepth 1 -name 22_11\*)
Pour rappel la commande suivante fonctionne bien mais pour ressortir 8 fichiers d'un total de quelques Mo, cela prend presque 15mn d’où mon besoin de cibler sur certains dossiers (commençant par "22_11_*" dans lesquels rechercher avec
-maxdepth 1
)/opt/bin/find . -name "7964.vce*" -exec rsync -a -R {} /share/data2_export/7964/ \;
la commande rsync fait donc bien ce qui est demandé, c'est juste que je n'arrive pas à lui mettre les données restreintes de 2 commandes find enchainées.
Comme dit avant la piste du print -0 et du xargs -0 devrait marcher.
[^] # Re: questions
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 2.
Merci encore Gil pour tes explications, effectivement je ne suis pas un pro du tout dans ce domaine, je ne connais pas bien la différence entre unix, linux…, je suis un utilisateur windows et MS-DOS à la base, bref un user de base mais je vois bien toute la puissance possible des commandes Linux ou Bash visiblement (je l'ignorais)
La commande
type rsync
me renvoiersync is /usr/bin/rsync
La commande
command -v rsync
me renvoie/usr/bin/rsync
Le déballage de BusyBox a été fait dans ce répertoire
/opt/bin
> réponse oui !Je vais creuser avec les options -print0 et xargs -0.
Un ami m'avait fait des scripts il y a quelques années et il s'était pris la tête avec cette limitation des commandes en Bash donc.
Un extrait de ce script fonctionne ci dessous par exemple
/opt/bin/find /share/data/* -type f -mmin -60 -print0| xargs -0 tar cf - |
[^] # Re: questions
Posté par Sioncarf59 . En réponse au message Problème sur enchainement de commandes find et rsync. Évalué à 2.
Merci Gil pour tes réponses.
J'ai testé et en gros rien ne fonctionne en l'état. Je pense que cela vient de mon "linux".
Je suis sur un NAS Qnap TS 219 installé depuis quelques années déjà mais qui tourne toujours bien pour mes besoins.
Après réflexion, je me souviens qu'il manquait pas mal d'options dans les commandes find par exemple et j'ai du, avec l'aide d'un ami, installer des package IPKG pour obtenir les options complémentaires de find et de Xargs qui ne fonctionnaient pas de base.
Il semblerait que j'ai un linux basic light d'installé et c'est surement pour cela que les options de rsync --files-from= ne fonctionne pas je pense.
C'est la raison pour laquelle je dois chercher la commande find via /opt/bin/find qui a été ajoutée à cet endroit pour pouvoir disposer de toutes les options.
Concernant les options installées, je suis incompétent pour refaire ce que mon ami avait fait à l'époque. Ce que je vois dans /opt/bin/find ce sont les commandes supplémentaires installées par exemple find@ et xargs@ mais je ne vois pas de rsync@ installé, ce pourquoi je ne dispose pas des options un peu poussées mais on s'éloigne du sujet..Je vais me rapprocher de mon ami pour savoir s'il peut m'aider sur ce point d'installation afin que la commande rsync puisse fonctionner avec les options.