#1 Le 11/01/2010, à 12:01
- gaffe_82
[Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
Bonjour à tous,
Voici mon souci : j'essaie de faire un script utilisant rsync pour sauvegarder un certain nombre de répertoires.
Voici mon script (backupRsync.sh) :
#!/bin/bash
dest="/tmp/BACKUP/"
exclude="/tmp/DATA/Mes\ documents/Mes\ videos/*"
OPTIONS="-rltgoDv --ignore-errors --force"
# FIN DES PARAMETRES A ADAPTER
if [ ! -d ${dest} ]
then
echo "*** Le repertoire ${dest} n'existe pas. Creation du repertoire ${dest}"
mkdir ${dest}
fi
IFS=$'\n';
for d in `cat /tmp/DATA/listfile`; do
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Debut de la sauvegarde de ${d} vers ${dest}..."
rsync ${OPTIONS} --delete-excluded ${exclude} "${d}" ${dest}
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Fin de la sauvegarde de ${d} vers ${dest} !"
done
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Fin !"
exit
Et mon fichier listfile :
/tmp/DATA/Dev
/tmp/DATA/Mes documents
Et voici l'erreur que j'ai lors du lancement du fichier :
-sh-3.2$ ./backup.ksh
### 11-01-10 12:04:24 : Debut de la sauvegarde de /tmp/DATA/Dev vers /tmp/BACKUP/...
building file list ... rsync: link_stat "/tmp/DATA/Mes\" failed: No such file or directory (2)
rsync: link_stat "/tmp/DATA/documents/Mes\" failed: No such file or directory (2)
rsync: link_stat "/tmp/DATA/videos/*" failed: No such file or directory (2)
done
sent 100 bytes received 20 bytes 240.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at main.c(892) [sender=2.6.8]
### 11-01-10 12:04:24 : Fin de la sauvegarde de /tmp/DATA/Dev vers /tmp/BACKUP/ !
### 11-01-10 12:04:24 : Debut de la sauvegarde de /tmp/DATA/Mes documents vers /tmp/BACKUP/...
building file list ... rsync: link_stat "/tmp/DATA/Mes\" failed: No such file or directory (2)
rsync: link_stat "/tmp/DATA/documents/Mes\" failed: No such file or directory (2)
rsync: link_stat "/tmp/DATA/videos/*" failed: No such file or directory (2)
done
sent 162 bytes received 20 bytes 364.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at main.c(892) [sender=2.6.8]
### 11-01-10 12:04:24 : Fin de la sauvegarde de /tmp/DATA/Mes documents vers /tmp/BACKUP/ !
### 11-01-10 12:04:24 : Fin !
Le problème c'est que je voudrais que Bash interprète correctement mes noms de répertoire contenant un espace (comme dans '/tmp/DATA/Mes documents') mais rsync ne le fait pas et cherche à synchroniser le répertoire '/tmp/DATA/documents/Mes\'
Merci pour votre aide !
Hors ligne
#2 Le 11/01/2010, à 12:11
- sinbad83
Re : [Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
Bonjour,
un bon conseil, bannis tous les espaces pour tous les baptêmes de fichiers ou de Dossiers, que ce soit en Linux ou en Windows.
Ta ligne
exclude="/tmp/DATA/Mes\ documents/Mes\ videos/*"
est bonne, mais celle-là ne l'est pas
/tmp/DATA/Mes documents
Le message d'erreur es l'illustration du problème des espaces.
La connaissance n'est pas une denrée rare, il faut la partager avec les autres.
Linux registered #484707
Site: www.coursinforev.org/doku.php
Desktop AMD Ryzen 5-3600, RAM 16GB, Ubuntu 20.10, HP Pavillon G6 Ubuntu 20.10 et Ten, Serveur Ubuntu 18.04
Hors ligne
#3 Le 11/01/2010, à 13:54
- gaffe_82
Re : [Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
Oui, l'idéal serait de supprimer tous les espaces...
Sauf que je cherche un moyen pour palier à ce problème et les utiliser
Hors ligne
#4 Le 11/01/2010, à 14:05
- credenhill
Re : [Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
hello
utiliser des "
$ ls -l /tmp/aa bb
ls: cannot access /tmp/aa: No such file or directory
ls: cannot access bb: No such file or directory
$
$ ls /tmp/"aa bb"
xxx
$
En ligne
#5 Le 11/01/2010, à 14:09
- gaffe_82
Re : [Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
C'est déjà le cas :
IFS=$'\n';
for d in `cat /tmp/DATA/listfile`; do
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Debut de la sauvegarde de ${d} vers ${dest}..."
rsync ${OPTIONS} --delete-excluded ${exclude} "${d}" ${dest}
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Fin de la sauvegarde de ${d} vers ${dest} !"
done
Mais ça ne semble pas marcher avec rsync...
Dernière modification par gaffe_82 (Le 11/01/2010, à 14:10)
Hors ligne
#6 Le 11/01/2010, à 16:14
- credenhill
Re : [Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
essaye avec eval
eval rsync ${OPTIONS} --delete-excluded ${exclude} "${d}" ${dest}
http://lists.samba.org/archive/rsync/2002-January/001219.html
En ligne
#7 Le 11/01/2010, à 16:59
- gaffe_82
Re : [Rsync+BASH] Utiliser des noms de fichiers/dossiers espaces
Ca marche !
Voici le bout de code que j'ai maintenant.
#!/bin/bash
dest="/tmp/BACKUP/"
exclude="/tmp/DATA/Mes\ documents/Mes\ videos/"
OPTIONS="-rltgoDv --ignore-errors --force"
if [ ! -d ${dest} ]
then
echo "*** Le repertoire ${dest} n'existe pas. Creation du repertoire ${dest}"
mkdir ${dest}
fi
IFS=$'\n';
for d in `cat /tmp/DATA/listfile`; do
IFS=$' ';
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Debut de la sauvegarde de ${d} vers ${dest}..."
eval rsync ${OPTIONS} --exclude=${exclude} "${d}" ${dest}
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Fin de la sauvegarde de ${d} vers ${dest} !"
done
echo "### $(date +%d-%m-%y\ %H:%M:%S) : Fin !"
exit
Le problème c'est que mon répertoire /tmp/DATA/Mes\ documents/Mes\ videos/ n'est pas exclu de la sauvegarde.
Par contre, si je mets :
exclude="Mes\ videos/"
Là, c'est bon
Du coup, ma question est :
Pourquoi est-ce que je ne peux pas définir un chemin complet à exclure ?
Car dans le cas où j'ai un nom de répertoire dans deux sous-dossiers différents, comment faire pour les différencier...
Ai-je été clair ?
Hors ligne