[cp] Copier certain repertoires et fichiers

Hamster -  
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   -
Bonjour ,

Je voudrais copier certain repertoires et fichiers dans un autre dossier avec un bash, d'ailleur c'est bash ou batch ? Sous linux c'est un .so ?
J'ai vu qu'avec la commande cp on pouvais a l'aide du -l faire un lien dur et -s un lien symbolique, quel est la difference entre les deux ?
Puis par la meme occasion je voudrais qu'il n'ecrase pas les fichiers deja existant mais sans qu'il crée le fichier ou repertoire en le renomment avec un ? à la fin.
Exemple :

cp -vl /home/servercs/hlds_l/cstrike/*.wad /home/servercs/www
cp -vl /home/servercs/hlds_l/cstrike/maps/* /home/servercs/www/maps
cp -vl /home/servercs/hlds_l/cstrike/overviews/* /home/servercs/www/overviews
cp -rvl /home/servercs/hlds_l/cstrike/sound/* /home/servercs/www/sound
cp -rvl /home/servercs/hlds_l/cstrike/sprites/* /home/servercs/www/sprites
cp -rvl /home/servercs/hlds_l/cstrike/models/* /home/servercs/www/models
cp -rvl /home/servercs/hlds_l/cstrike/gfx/* /home/servercs/www/gfx

Merci de votre aide

3 réponses

  1. kmf
     
    d'ailleur c'est bash ou batch ? Sous linux c'est un .so ?
    bash

    Sous linux c'est un .so ?
    Non, c'est un executable dans /bin/bash et c'est ta shell (le truc ou tu tapes de commandes)

    J'ai vu qu'avec la commande cp on pouvais a l'aide du -l faire un lien dur
    Oui, un lien dur est fait avec:
    cp -l fichier lien

    ou avec:
    ln fichier lien


    quel est la difference entre les deux ?
    l'un est dur et l'autre symbolique.
    Le dur est limite a la meme partition et ca apparait comme de fichiers differents (mais ce n'est qu'un fichier!). Avec "ls -l" on voit:
    -rw-r--r--  2 user  user   0 Mar  2 15:53 lien_dur
    -rw-r--r--  2 user  user   0 Mar  2 15:53 toto
    lrwxrwxrwx  1 user user    4 Mar  2 15:55 lien_symb -> toto
    

    c'est le "2" entre "-rw-r--r--" et "user user ..." qui indique qu'il s'agit d'un lien dur entre "toto" et "lien_dur".
    Le symbolique peut etre entre differents partitions et apparait comme
    lien_symb -> toto

    ci-dessu.
    Un lien symbolique est fait avec:
    cp -s fichier lien

    ou avec:
    ln -s fichier lien


    Puis par la meme occasion je voudrais qu'il n'ecrase pas les fichiers deja existant mais sans qu'il crée le fichier ou repertoire en le renomment avec un ?

    cp -i... fichiers /cible/ | yes n

    ou ... sont d'eventuelles autres options de cp.
    100
    1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      Juste un petite précision sur le 2 en question...

      Il ne faut surtout pas s'y fier, ce chiffre indique en cas de fichiers liés le nombre de fichiers qui partagent le même inode. (le nombre de lien.)

      la meilleur methode consiste a afficher les numeros d'inodes (ls -i) de combiner ça avec un affichage correct (-1 le chiffre) passé par un sort pour bien voir ce qu'on veut
      ls -1i |sort
      --
      ...Mana mana
         Tutudutu...
      0
  2. Hamster
     
    Deja merci kmf de la qualité de ta réponse.

    Je vais utiliser le ln mais le probléme c'est que quand je veux copier des repertoires avec la commande suivant il me dit que cela ne m'est pas permis.
    ln -vd /home/servercs/hlds_l/cstrike/gfx/* /home/servercs/www/gfx

    Sinon comment faire pour mettre toute mes commandes dans un fichier et quand je lance ce fichier il me les traitent une par une ?

    Merci
    1
  3. kmf
     
    Pour de repertoires (et en cas de doute) fais de liens symboliques!! Selon la page man de "ln" l'option -d permet en effet de faire de liens dur pour de repertoires mais il faut etre root pour en avoir le droit et je te deconseillerais fortement ca. On plus tu risques de ne plus reconnaitres ces liens plus tard (pour les liens symbolique c'est evident).

    Moi je te proposerais plutot:
    cd /home/servercs/hlds_l/cstrike/
    for NOM in *.wad maps overviews \
    sound sprites models gfx  ;  do 
    ln -sv $NOM ../../www/$NOM
    done
    

    Ca devrait suffir. Tu peux taper ca ligne par ligne (le "\" derrier overviews permet de couper de lignes trops longs en morceaux dans une shell, je l'ai mis car le forum coupe lui meme de lignes trop longues et ca ne cree que des ennuies si tu ne reconnais pas que c'est une ligne et pas deux)

    ou tu peux copier ca dans un fichier disons: "script.sh" et tu fais apres:
    chmod +x script.sh
    ./script.sh
    

    ca suffit pour l'executer. De facon generale pour automatiser tu mets toutes les commandes dans un fichier ascii, tu le rends executable (avec "chmod +x") et tu l'execute comme une commande.
    1