Signaler

Commande pour ne copier que certain fichier dans un dossier [Résolu]

Posez votre question ZonZon - Dernière réponse le 12 oct. 2017 à 23:04 par ZonZon
Bonjour à tous

je début sous linux et je cherche une commande qui me permétrait de ne copier que certains fichier dans un dossier. Par exemple copier du 3 au 7eme fichier, ou que les 3 premiers ou alors le 2eme, le 5eme et le 8eme sans devoir entrer leurs noms car c'est trop long à taper.

Si vous connaissez une solution, merci de partager.
Bonne soirée



Utile
+0
plus moins
Bonjour

Le plus simple est de faire une boucle qui itère sur les bons fichiers.

Exemple : copier les fichiers situés dans
/home/toto/titi
contenant "mp3" dans leur nom vers
/home/toto/tata


mkdir -p /home/toto/tata
for x in $(ls -1 /home/toto/titi | grep mp3); do cp "$x" /home/toto/tata; done


Ensuite il faut savoir que la touche tabulation permet d'utiliser l'auto complétion et de ne pas être trop sensible à la longueur des fichiers.

Bonne chance
UnGnU 545Messages postés lundi 2 mai 2016Date d'inscription 12 octobre 2017 Dernière intervention - 10 oct. 2017 à 09:17
Salut mamiemando,

La commande
ls
est à éviter dans une boucle tant que possible, c'est le mal en personne en cas d'espaces dans les noms de fichiers ;-(

Le contenu du répertoire :
$ ls -1
fich1.txt
fich2.txt
fich3.txt
mon fichier a trou.txt

La commande à prescrire :
$ for i in $(ls -1 *);do echo "===> ${i}";done
===> fich1.txt
===> fich2.txt
===> fich3.txt
===> mon
===> fichier
===> a
===> trou.txt

La bonne façon de faire :
$ for i in *;do echo "===> ${i}";done
===> fich1.txt
===> fich2.txt
===> fich3.txt
===> mon fichier a trou.txt


;-)
Répondre
mamiemando 27976Messages postés jeudi 12 mai 2005Date d'inscription ModérateurStatut 11 octobre 2017 Dernière intervention - 11 oct. 2017 à 08:10
Oui tout à fait ! Du coup ce que j'ai dit ne marche pas dans ce genre de situations...

C'est d'ailleurs pour ça que je ne mets jamais d'espaces dans mes noms de fichiers justement pour me laisser cette flexibilité, ce qui permet d'utiliser ensuite directement des choses comme
ls -1 *.mp3
dans une boucle
for
.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour, et merci beaucoup pour vos réponses. donc si je comprend bien vos script, pour faire ce que je souhaite il me faut écrire quelque chose de ce genre:

$ for i in monDossier;do cp "${2}/mondossier";done


pour copier le 3eme fichier.
zipe31 35043Messages postés dimanche 7 novembre 2010Date d'inscription ContributeurStatut 10 octobre 2017 Dernière intervention - 10 oct. 2017 à 19:49
Salut,

Non, pas du tout ;-((

Ce que tu veux faire n'est pas possible avec une seule commande, ou juste avec un bout de script. C'est beaucoup plus complexe que ça ;-(
Répondre
Donnez votre avis
Utile
+0
plus moins
Bon il va falloir que je mette au C si je comprend bien.
mamiemando 27976Messages postés jeudi 12 mai 2005Date d'inscription ModérateurStatut 11 octobre 2017 Dernière intervention - 11 oct. 2017 à 08:14
Un script shell (ou dans un autre langage) peut suffire. Il suffit d'écrire une boucle avec ce genre de boucle. Ensuite en maintenant un compteur (disons
i
) dans ta boucle
for
, tu peux déclencher ton traitement sur les valeurs de
i
appropriées.
Répondre
Donnez votre avis
Utile
+0
plus moins
Ok merci à tous, je vais étudier les scripts shell
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !