Script copie fichiers
yankeekfp
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
yankeekfp Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
yankeekfp Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à créer un script linux qui permet de copier un ou plusieurs fichiers dans un ou plusieurs repertoires de destination. Les deux listes (fichiers à copier et repertoire de destination) doivent être séparées par le caractère ":".
Je vous remercie pour votre aide.
Je cherche à créer un script linux qui permet de copier un ou plusieurs fichiers dans un ou plusieurs repertoires de destination. Les deux listes (fichiers à copier et repertoire de destination) doivent être séparées par le caractère ":".
Je vous remercie pour votre aide.
A voir également:
- Script copie fichiers
- Copie cachée - Guide
- Script vidéo youtube - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
10 réponses
Salut,
man cp peut aider.
man cut
Et je pense que tu as tout ce qu'il faut si tu connais les bases (genre $1=premier argument, $2 le deuxième...)
N'hésite pas à donner plus de détails si tu veux plus d'explications.
man cp peut aider.
man cut
Et je pense que tu as tout ce qu'il faut si tu connais les bases (genre $1=premier argument, $2 le deuxième...)
N'hésite pas à donner plus de détails si tu veux plus d'explications.
Salut,
Le nombre d'argument ne doit pas être spécifié dans le script. L'utilisateur peut peut vouloir faire la copie de 12 fichiers dans différents répertoires. La copie se fera de manière récursive, c'est à dire dans tous les repertoires de destinations.
De plus, je me demande comment faire pour que le séparateur ":" soit pris en compte dans le script pour distinguer la partie à gauche correspond aux fichiers à copier et la partie de droite aux répertoires de destination.
Merci pour ton aide
Le nombre d'argument ne doit pas être spécifié dans le script. L'utilisateur peut peut vouloir faire la copie de 12 fichiers dans différents répertoires. La copie se fera de manière récursive, c'est à dire dans tous les repertoires de destinations.
De plus, je me demande comment faire pour que le séparateur ":" soit pris en compte dans le script pour distinguer la partie à gauche correspond aux fichiers à copier et la partie de droite aux répertoires de destination.
Merci pour ton aide
Juste une piste (c'est comme ça que je ferais)
En utilisant le ":" comme séparateur et en prenant tout ce qui va avant (man cut)
En utilisant le ":" comme séparateur et en prenant tout ce qui va après (man cut)
Ensuite j'utiliserais une commande sed pour remplacer les espaces (si ce sont des espaces qui séparent les fichiers) par des retours chariots dans les deux fichiers (man sed)
En suite je ferais un truc du genre
C'est peut-être pas le plus simple mais ça doit marcher
En utilisant le ":" comme séparateur et en prenant tout ce qui va avant (man cut)
cut [arguments] laListe > source.txt
En utilisant le ":" comme séparateur et en prenant tout ce qui va après (man cut)
cut [arguments] laListe > cible.txt
Ensuite j'utiliserais une commande sed pour remplacer les espaces (si ce sont des espaces qui séparent les fichiers) par des retours chariots dans les deux fichiers (man sed)
En suite je ferais un truc du genre
while read source do while read cible do cp -p ${source} ${cible} done<cible.txt done<source.txt
C'est peut-être pas le plus simple mais ça doit marcher
J'ai analysé la solution que je trouve très intéressante.
Si j'arrive à extraire la partie avant le ":" et celle après le ":". Est-ce qu'il ne serait pas plus simple de les affecter à une variable de type source="la partie avant" et destination="la partie après"?
Ensuite, une fois que c'est fait, j'ai juste besoin de faire cp -r $source $destination.
Qu'en penses-tu?
Si j'arrive à extraire la partie avant le ":" et celle après le ":". Est-ce qu'il ne serait pas plus simple de les affecter à une variable de type source="la partie avant" et destination="la partie après"?
Ensuite, une fois que c'est fait, j'ai juste besoin de faire cp -r $source $destination.
Qu'en penses-tu?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sur le principe oui tu peux le mettre dans un variable...
Mais pour la suite je te suis pas trop, au-delà de deux arguments ton cp va te hurler dessus (s'il y a plusieurs fichiers/répertoires dans source et cible).
Le cp -r c'est plutôt pour copier les arborescences, pas les fichiers isolés. cp -p te permettra de copier le fichier à l'identique (avec date de création, de dernier accès...)
Pour exploiter ton idée de la variable tu dois pouvoir utiliser des tableaux et faire un genre de "split"... mais j'ai jamais fait.
Mais pour la suite je te suis pas trop, au-delà de deux arguments ton cp va te hurler dessus (s'il y a plusieurs fichiers/répertoires dans source et cible).
Le cp -r c'est plutôt pour copier les arborescences, pas les fichiers isolés. cp -p te permettra de copier le fichier à l'identique (avec date de création, de dernier accès...)
Pour exploiter ton idée de la variable tu dois pouvoir utiliser des tableaux et faire un genre de "split"... mais j'ai jamais fait.
Oui tu as raison. Je suis donc encore loin de la solution :-).
Le script que tu proposes est surement la solution au problème. Pourrais-tu me l'ecrire en entier? J'ai du mal a suivre pour extraire avant et après le ":".
La commande "read" est pour lire un texte saisie au clavier je crois. Si oui, comment l'interpreteur shell va faire pour traiter ca dans un fichier?
Merci encore
Le script que tu proposes est surement la solution au problème. Pourrais-tu me l'ecrire en entier? J'ai du mal a suivre pour extraire avant et après le ":".
La commande "read" est pour lire un texte saisie au clavier je crois. Si oui, comment l'interpreteur shell va faire pour traiter ca dans un fichier?
Merci encore
Bonjour quel gestionnaire de fichiers à tu ?
Un passionné de Linux : Acer Aspire X1430-005 AMD radeon HD 6310 Xubuntu 12.04 LTS / Asus - X73BR AMD 7470M Kubuntu 12.10 / Acer Aspire X1430-005 AMD radeon HD 6310 Ubuntu 12.10 Gnome.
Un passionné de Linux : Acer Aspire X1430-005 AMD radeon HD 6310 Xubuntu 12.04 LTS / Asus - X73BR AMD 7470M Kubuntu 12.10 / Acer Aspire X1430-005 AMD radeon HD 6310 Ubuntu 12.10 Gnome.
En supposant que ta liste soit dans un fichier "list.txt"
Avant le :
Après le :
http://www.linuxcertif.com/doc/keyword/cut/
Ensuite
avec le code que je t'ai donné tout à l'heure, tu mets tout ça dans un sh, et tu lances.
Bien sûr tu peux faire des rm des fichiers créés pour faire propre.
En revanche là je suis sus Windows donc j'ai pas pu tester... donc y a peut-être deux trois trucs à modifier...
Pour le read c'est un truc que j'utilisais quand je faisais du Korn Shell (ksh). Ecrit comme ça dans un script ça lit ligne par ligne le fichier dirigé dans le done (done<Lefichier). Je pense que ça doit être universel comme syntaxe...
Avant le :
cut -d: -f1 list.txt > source.txt
Après le :
cut -d: -f2 list.txt > cible.txt
http://www.linuxcertif.com/doc/keyword/cut/
Ensuite
sed "s+ +\n+g" source.txt sourceFinale.txt idem pour cible
avec le code que je t'ai donné tout à l'heure, tu mets tout ça dans un sh, et tu lances.
Bien sûr tu peux faire des rm des fichiers créés pour faire propre.
En revanche là je suis sus Windows donc j'ai pas pu tester... donc y a peut-être deux trois trucs à modifier...
Pour le read c'est un truc que j'utilisais quand je faisais du Korn Shell (ksh). Ecrit comme ça dans un script ça lit ligne par ligne le fichier dirigé dans le done (done<Lefichier). Je pense que ça doit être universel comme syntaxe...
Je vais tester tout ça.Juste un point, ma liste ne sera pas dans un fichier mais sera passé en argument à l'exécution du script. Par exemple, l'utilisateur mettra
$scriptcopie fic1 fic2 fic3 fic4 : rep1 rep2 rep3 rep4 rep5 rep6.
Pour prendre en compte cette liste, est-ce que je peux utiliser
echo "Donner les deux listes: $*"
Merci.
$scriptcopie fic1 fic2 fic3 fic4 : rep1 rep2 rep3 rep4 rep5 rep6.
Pour prendre en compte cette liste, est-ce que je peux utiliser
echo "Donner les deux listes: $*"
Merci.