[cp] Copier certain repertoires et fichiers
Hamster
-
asevere Messages postés 13095 Date d'inscription Statut Webmaster Dernière intervention -
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
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:
- [cp] Copier certain repertoires et fichiers
- Comment copier une vidéo youtube - Guide
- Renommer des fichiers en masse - Guide
- Super copier - Télécharger - Gestion de fichiers
- Fichiers epub - Guide
- Historique copier coller - Guide
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:
ou avec:
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:
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
ci-dessu.
Un lien symbolique est fait avec:
ou avec:
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 ?
ou ... sont d'eventuelles autres options de cp.
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.
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
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
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:
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:
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.
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.
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--
...Mana mana
Tutudutu...