[Shell] recopier le contenu d'un dossier.

Résolu
Bonjour,

Je cherche un creer un shell qui copie le contenu d'un repertoire vers un autre. En prenant en compte les fichier cache "."

Quelqun à une idée ... ou un lien?
Configuration: Windows XP
Firefox 2.0.0.3

13 réponses

  1. Modérateur
    Salut,

    pour cp c'est la même option -p

    lami20j@debian:~$ ls -al /etc/skel/
    total 12
    drwxr-xr-x   2 root root 1024 2003-08-11 10:19 .
    drwxr-xr-x 122 root root 6144 2007-05-27 18:06 ..
    -rw-r--r--   1 root root  220 2006-12-11 22:20 .bash_logout
    -rw-r--r--   1 root root  414 2006-12-11 22:20 .bash_profile
    -rw-r--r--   1 root root 2227 2006-12-11 22:20 .bashrc
    lami20j@debian:~$ mkdir newrep
    lami20j@debian:~$ ls -A1 /etc/skel  | xargs -I fic cp -pv /etc/skel/fic newrep/
    `/etc/skel/.bash_logout' -> `newrep/.bash_logout'
    `/etc/skel/.bash_profile' -> `newrep/.bash_profile'
    `/etc/skel/.bashrc' -> `newrep/.bashrc'
    lami20j@debian:~$ ls -al newrep/
    total 28
    drwxr-xr-x   2 lami20j lami20j  4096 2007-05-27 18:31 .
    drwxr-xr-x 126 lami20j lami20j 12288 2007-05-27 18:31 ..
    -rw-r--r--   1 lami20j lami20j   220 2006-12-11 22:20 .bash_logout
    -rw-r--r--   1 lami20j lami20j   414 2006-12-11 22:20 .bash_profile
    -rw-r--r--   1 lami20j lami20j  2227 2006-12-11 22:20 .bashrc
    
    2
    1. Contributeur
      Avec tar, il faut utiliser l'option -p pour garder le bon proprio:
      mkdir /home/$utilisateur/
      cd /etc/skel ; tar -cf - . | (cd /home/$utilisateur ; tar -xpvf -)
      0
      1. OK je te remercie !

        Alors pour recopiez le contenue d'un repertoire :

        mkdir /home/$utilisateur/ 
        cd /etc/skel ; tar -cf - . | (cd /home/$utilisateur ; tar -xvf -)


        puis pour modifier le proprietaire des fichier nouvelement copié :

        chown -R $NUSER:"users" /home/$NUSER
        chown $NUSER:"users" /home/$NUSER


        Voila encore merci!
        0
        1. Modérateur
          Euh.. he bien est que je doit traité mes fichier et dossier un par un avc des chgrp et chown
          Non, pas du tout :-)
          Tu as l'option -R pour le mode recursif
          -v c'est pour verbose (c'est à dire que tu verras à l'écran ce que la commande fait)
          chown -vR proprietaire:groupe /chemin/vers/repertoire
          0
          1. Euh.. he bien est que je doit traité mes fichier et dossier un par un avc des chgrp et chown ou je peu directement qand je fait par exemple (cd /home/$utilisateur ; tar -xvf -) mettre comme proprietaire $utilisateur et come groupe "users" ?
            0
            1. Modérateur
              Je ne suis pas sur d'avoir compris ta question.
              En revanche tu peux toujours modifier les droits avec chmod
              0
              1. Yes ça marche merci tout le monde ! Dite par hazard quand je copie les fichier je le fait en root, c'est possible que malgré que je lance ce shell en root que le proprietaire et le groupe des fichiers et dossiers ne soit pas root ?
                0
                1. Modérateur
                  Dans ton cas
                  $ mkdir newrep
                  $ ls -A1 /etc/skel  | xargs -I fic cp -v /etc/skel/fic newrep/
                  `/etc/skel/.bash_logout' -> `newrep/.bash_logout'
                  `/etc/skel/.bash_profile' -> `newrep/.bash_profile'
                  `/etc/skel/.bashrc' -> `newrep/.bashrc'
                  $ ls -A1 newrep/
                  .bash_logout
                  .bash_profile
                  .bashrc

                  0
                  1. Modérateur
                    une autre possibilité
                    lami20j@debian:~/trash$ mkdir newrep
                    lami20j@debian:~/trash$ ls -A1 rep
                    a
                    aa
                    aaa
                    .b
                    .bb
                    .bbb
                    lami20j@debian:~/trash$ ls -A1 rep  | xargs -I fic cp -v rep/fic newrep/
                    `rep/a' -> `newrep/a'
                    `rep/aa' -> `newrep/aa'
                    `rep/aaa' -> `newrep/aaa'
                    `rep/.b' -> `newrep/.b'
                    `rep/.bb' -> `newrep/.bb'
                    `rep/.bbb' -> `newrep/.bbb'
                    lami20j@debian:~/trash$ ls -A1 newrep/
                    a
                    aa
                    aaa
                    .b
                    .bb
                    .bbb
                    
                    0
                    1. Contributeur
                      mkdir /home/$utilisateur/
                      cd /etc/skel ; tar -cf - . | (cd /home/$utilisateur ; tar -xvf -)
                      0
                      1. En fait j'avais deja testé une methode comme ça mais avec un -Ra mais j'ai toujours le meme probleme...

                        mkdir /home/$utilisateur/
                        for i in $(ls -a /etc/skel)
                        do
                        cp $i /home/$utilisateur/
                        done

                        Ce qui me donne pas mal d'erreur du genre :
                        cp: ne peut evaluer '.infobash' : Aucun fichier ou répertoire de ce type

                        sinon lami ta methode est bien... mais le probleme c'est que je ne veut pas fair un copier coller du dossier mais juste de son contenue.
                        0
                        1. Modérateur
                          Salut,

                          lit man cp pour voir toutes les options de la commande cp
                          lami20j@debian:~/trash$ ls -al rep
                          total 24
                          drwxr-xr-x  2 lami20j lami20j  4096 2007-05-26 13:53 .
                          drwxr-xr-x 33 lami20j lami20j 20480 2007-05-26 13:55 ..
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:53 a
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:53 aa
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:53 aaa
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:53 .b
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:53 .bb
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:53 .bbb
                          lami20j@debian:~/trash$ ls -al newrep
                          ls: newrep: Aucun fichier ou répertoire de ce type
                          lami20j@debian:~/trash$ cp -vR rep newrep
                          `rep' -> `newrep'
                          `rep/.bbb' -> `newrep/.bbb'
                          `rep/aa' -> `newrep/aa'
                          `rep/a' -> `newrep/a'
                          `rep/aaa' -> `newrep/aaa'
                          `rep/.bb' -> `newrep/.bb'
                          `rep/.b' -> `newrep/.b'
                          lami20j@debian:~/trash$ ls -al newrep
                          total 24
                          drwxr-xr-x  2 lami20j lami20j  4096 2007-05-26 13:55 .
                          drwxr-xr-x 34 lami20j lami20j 20480 2007-05-26 13:55 ..
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:55 a
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:55 aa
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:55 aaa
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:55 .b
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:55 .bb
                          -rw-r--r--  1 lami20j lami20j     0 2007-05-26 13:55 .bbb

                          0
                          1. Modérateur
                            Salut,
                            for i in $(ls -a /chemin/rep); do cp "$i" /new/rep/ ; done
                            ;-))
                            0