Commande pour ne copier que certain fichier dans un dossier

Résolu
ZonZon -  
 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

4 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    0
    1. UnGnU Messages postés 1468 Statut Contributeur 158
       
      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


      ;-)
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      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
      .
      0
  2. ZonZon
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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 ;-(
      0
  3. ZonZon
     
    Bon il va falloir que je mette au C si je comprend bien.
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      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.
      0
  4. ZonZon
     
    Ok merci à tous, je vais étudier les scripts shell
    0