[cp] Copier certain repertoires et fichiers

Fermé
Hamster - 2 mars 2005 à 15:40
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 3 mars 2005 à 17:54
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
A voir également:

3 réponses

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
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
3 mars 2005 à 17:54
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
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
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