SH boucle : lecture et copie de fichiers
vitcz
Messages postés
46
Date d'inscription
Statut
Membre
Dernière intervention
-
vitcz Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
vitcz Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je fais un script bash executé sur serveur linux :
j'ai un fichier texte : liste.txt et un répertoire /repertoire1 : Mon fichier texte est une liste de noms de fichiers avec un retour à la ligne pour chaque nouveau nom.
J'aimerais faire une boucle qui m'exporte dans un /repertoire2 seulement les fichiers de /repertoire1 cités dans liste.txt.
la suite de mon script : compactage, envoi etc ne me pose pas trop de probleme mais je ne vois pas comment attaquer cette boucle : cat ? read ? sed ?
Merci d'avance pour vos idées.
Je fais un script bash executé sur serveur linux :
j'ai un fichier texte : liste.txt et un répertoire /repertoire1 : Mon fichier texte est une liste de noms de fichiers avec un retour à la ligne pour chaque nouveau nom.
J'aimerais faire une boucle qui m'exporte dans un /repertoire2 seulement les fichiers de /repertoire1 cités dans liste.txt.
la suite de mon script : compactage, envoi etc ne me pose pas trop de probleme mais je ne vois pas comment attaquer cette boucle : cat ? read ? sed ?
Merci d'avance pour vos idées.
A voir également:
- SH boucle : lecture et copie de fichiers
- Fichier .sh - Forum Shell
- Exécuter un script shell - Astuces et Solutions
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Tv orange chargement en boucle ✓ - Forum TV & Vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
9 réponses
Salut,
> c'est une redirection en écriture
2 c'est le descripteur de fichier pour la sortie d'erreur
/dev/null est un pseudo périphérique spécial vers lequel on peut rediriger un contenu qu'on ne veut pas afficher à l'écran (une sorte de trou noir)
Voici une exemple
Tu vois bien qu'il y a 3 lines qui ne m'intéressent pas vraiment. Ce sont des messages d'erreurs.
En utilisant une redirection vers /dev/null de ces erreurs donc de la sortie d'errer standard qui est 2 j'obtiens l'affichage sans erreurs
A savoir que tu peux par exemple capturer seulement les erreurs ou afficher le résultat sans erreurs à l'écran et enregistrer les erreurs dans un fichier pour un traitement ultérieur, etc.
> c'est une redirection en écriture
2 c'est le descripteur de fichier pour la sortie d'erreur
/dev/null est un pseudo périphérique spécial vers lequel on peut rediriger un contenu qu'on ne veut pas afficher à l'écran (une sorte de trou noir)
Voici une exemple
lami20j@debian:~$ find /etc -name '*active*' find: /etc/ssl/private: Permission non accordée /etc/selinux/refpolicy-targeted/modules/active find: /etc/selinux/refpolicy-targeted/modules/active: Permission non accordée find: /etc/selinux/refpolicy-targeted/modules/previous: Permission non accordée
Tu vois bien qu'il y a 3 lines qui ne m'intéressent pas vraiment. Ce sont des messages d'erreurs.
En utilisant une redirection vers /dev/null de ces erreurs donc de la sortie d'errer standard qui est 2 j'obtiens l'affichage sans erreurs
lami20j@debian:~$ find /etc -name '*active*' 2>/dev/null /etc/selinux/refpolicy-targeted/modules/active
A savoir que tu peux par exemple capturer seulement les erreurs ou afficher le résultat sans erreurs à l'écran et enregistrer les erreurs dans un fichier pour un traitement ultérieur, etc.
Salut,
$ tree . |-- liste.txt |-- repertoire1 | |-- fichier1.txt | |-- fichier2.txt | |-- fichier3.txt | |-- fichier4.txt | |-- fichier5.txt | |-- fichier6.txt | |-- fichier7.txt | |-- fichier8.txt | `-- fichier9.txt `-- repertoire2 2 directories, 10 files $ cat liste.txt fichier1.txt fichier3.txt fichier5.txt fichier7.txt fichier9.txt fichier18.txt $ while read line; do mv repertoire1/${line} repertoire2/${line} 2>/dev/null; done < liste.txt $ tree . |-- liste.txt |-- repertoire1 | |-- fichier2.txt | |-- fichier4.txt | |-- fichier6.txt | `-- fichier8.txt `-- repertoire2 |-- fichier1.txt |-- fichier3.txt |-- fichier5.txt |-- fichier7.txt `-- fichier9.txt 2 directories, 10 files $;-))
Merci JIPICY ç a m'a l'air très bien,
je test ça tout de suite, pourrais tu m'expliquer ce petit morceau de code stp : 2>/dev/null;
merci
je test ça tout de suite, pourrais tu m'expliquer ce petit morceau de code stp : 2>/dev/null;
merci
OK, c'est très intéressant.
Effectivement, je ne vois apparaître que les noms de fichiers qui ont réellement été transférées.
Pour ce qui est de la syntaxe de Jipicy, il faut que le fichier de txt qui comprend la liste des fichiers a transférer comprenne une dernière ligne vide sinon le dernier fichier listé n'est transféré.
à moins que j'ai mal intégré la fonction... ;)
Effectivement, je ne vois apparaître que les noms de fichiers qui ont réellement été transférées.
Pour ce qui est de la syntaxe de Jipicy, il faut que le fichier de txt qui comprend la liste des fichiers a transférer comprenne une dernière ligne vide sinon le dernier fichier listé n'est transféré.
à moins que j'ai mal intégré la fonction... ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Un problème apparait lorsque le fichier texte contient une ligne vide. Dans ce cas, le repertoire1 est déplacé dans le repertoire2. Ce problème survient avec toutes les yntaxte que j'ai essayé, aussi je cherche un moyen de supprimer les sauts de ligne dans mon fichier texte, je pense à un cat liste.txt | sed -e /n | sed ''<liste.txt
Bien sur cette syntaxe est incorrecte. :(
Un problème apparait lorsque le fichier texte contient une ligne vide. Dans ce cas, le repertoire1 est déplacé dans le repertoire2. Ce problème survient avec toutes les yntaxte que j'ai essayé, aussi je cherche un moyen de supprimer les sauts de ligne dans mon fichier texte, je pense à un cat liste.txt | sed -e /n | sed ''<liste.txt
Bien sur cette syntaxe est incorrecte. :(
merci jipicy, hélas cela ne marche pas, le fichier nexlist.txt généré comprend les mêmes sauts de lignes.
En revanche avec cette syntaxe :
egrep -v '^(#| *$)' maliste | while read line; do mv rep1/$line rep2/$line ;done
cela fonctionne plutot pas mal. Merci pour ton aide, cela m'a donnée bcp d'idées.
En revanche avec cette syntaxe :
egrep -v '^(#| *$)' maliste | while read line; do mv rep1/$line rep2/$line ;done
cela fonctionne plutot pas mal. Merci pour ton aide, cela m'a donnée bcp d'idées.