Copie de fichiers d'une seule extension

Copie de fichiers d'une seule extension - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 03-05-2005 à 23:15:29    

Bonjour,
 
Je voulais tantôt faire un backup de mes fichiers LaTeX, donc j'ai fait

cp -r /home/mat/docs/*.tex /home/mat/backup/


croyant que ça allait me mettre tous mes fichiers tex dans le dossier backup. Mais tout ce que ça fait, c'est ça:

cp: ne peut évaluer `/home/mat/docs/*.tex': Aucun fichier ou répertoire de ce type


 
Alors je me demandais comment on pouvait faire pour faire un script qui copierait tous les fichiers du répertoire /home/mat/docs (ainsi que des sous-répertoires du dossier), et qui auraient l'extension .tex, pour les mettre dans un dossier de backup.
 
Si une astérisque ne marche pas comme "joker" avec la commande cp, y a-t-il un autre caractère à utiliser?
 
 
Merci d'avance pour vos réponses :-)

Reply

Marsh Posté le 03-05-2005 à 23:15:29   

Reply

Marsh Posté le 04-05-2005 à 18:59:34    

Personne ne sait? :-|

Reply

Marsh Posté le 04-05-2005 à 19:03:43    

find /home/mat/docs/ -type f -name "*.tex" -exec cp '{}' /home/mat/backup \;

Reply

Marsh Posté le 04-05-2005 à 21:37:06    

Hé ben, j'aurais jamais trouvé ça tout seul :-D Merci ory!
 
Mais quand je mets ça dans une console, il ne se passe rien :-? MAis il n'y a pas de message d'erreur non plus.

Reply

Marsh Posté le 04-05-2005 à 21:47:15    

ory a écrit :

find /home/mat/docs/ -type f -name "*.tex" -exec cp '{}' /home/mat/backup \;

La même chose avec zsh:

cp -i /home/mat/docs/**/*.tex /home/mat/backup/


Le problème avec ces deux commandes, c'est que tous les fichiers *.tex seront placés à la racine de /home/mat/backup. Si par malheur il y a deux fichiers qui ont le même nom, un des deux sera écrasé (ce qui est plutôt ennuyeux pour une sauvegarde!). D'où le -i pour limiter la casse; mais la situation reste bancale.
 
Si tu veux aussi copier la hiérarchie des fichiers concernés, il va te falloir jouer un peu du 'cut' [:spamafote]

Reply

Marsh Posté le 04-05-2005 à 22:29:46    

Merci de ta réponse, pillow :)
 
Je ne pensais pas que ce serait si compliqué [:angel_dooglas]
 
 
Comment est-ce que ça se fait que la commande de Ory ne fonctionne pas chez moi? Parce que, effectivement, j'ai plusieurs fichiers portant le même nom dans des répertoires différents [:atlantis]

Reply

Marsh Posté le 05-05-2005 à 16:50:55    

Code :
  1. BASEDIR=/home/mat/docs
  2. BACKUP=/home/mat/backup
  3. cd $BASEDIR
  4. for i in `find -name \*.tex`; do
  5.   mkdir -p $BACKUP/`dirname $i`
  6.   cp $i $BACKUP/`dirname $i`
  7. done


 
Attention, ça ne marchera pas s'il y a des espaces dans les noms de fichiers ou de répertoires.

Reply

Marsh Posté le 05-05-2005 à 17:28:14    

Ou, peut être un peu plus simple:

tar -cf /home/mat/backup/backup.tar $(find /home/mat/docs/ -type f -name "*.tex" )

L'avantage c'est qu'on peut créer de nouvelles archives avec des noms différents à chaque fois.
 
On peut aussi ne pas faire d'archive:

cd /home/mat/backup/
tar -c $(find /home/mat/docs/ -type f -name "*.tex" ) | tar -x

Mais ça ne marche toujours pas s'il y a des espaces qui trainent.
 
Ceci par contre:

cd /home/mat/backup/
tar -c /home/mat/docs/**/*.tex(.) | tar -x

doit marcher. Mais il faut utiliser zsh :whistle:

Reply

Marsh Posté le 06-05-2005 à 08:15:22    

Jar Jar a écrit :

Code :
  1. BASEDIR=/home/mat/docs
  2. BACKUP=/home/mat/backup
  3. cd $BASEDIR
  4. for i in `find -name \*.tex`; do
  5.   mkdir -p $BACKUP/`dirname $i`
  6.   cp $i $BACKUP/`dirname $i`
  7. done


 
Attention, ça ne marchera pas s'il y a des espaces dans les noms de fichiers ou de répertoires.


 
Pour cela il suffit de changer la variable $IFS

Reply

Marsh Posté le 06-05-2005 à 11:08:10    

rsync ne ferait-il pas l'affaire ?

Reply

Marsh Posté le 06-05-2005 à 11:08:10   

Reply

Marsh Posté le 06-05-2005 à 11:12:45    

ory a écrit :

Pour cela il suffit de changer la variable $IFS


tu peux expliquer ?


---------------
Jotenakis
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed