J'ai lu ton script en entier, mais je ne suis pas sûr de comprendre ce que tu veux faire...
Etudions le ligne à ligne ... si jamais la discussion s'étend, mieux vaudra créer un topic à part, avant de reposter ici le script corrigé.
greg2007 a écritje cherche à faire un script pour mettre à jour deux dossiers
rsync fait ça il me semble, mais ça peut-être intéressant de la faire en script
# selection de l'extension
find $path1/ -iname "*.*" > /home/$user/ext
là tu sélectionne tout les éléments qui contiennent un point, si $path1 = ~/ , ça inclu :
~/.icons/ # un dossier dont le chemin contient un point (les dossiers/fichiers cachés par exemple)
~/toto/blabla. # un fichier qui se termine par un point
~/.icons/CV # un fichier dont le chemin contient un point
~/ma_musique/piste.mp3 # un fichier quelconque avec une extension quelconque
Je ne pense pas que tu souhaite séléctionner tout ça, y compris descendre dans l'arborescence.
cat /home/$user/ext | grep "\.*" > /home/$user/ext
Là je comprends pas ... ça sélectionne la même chose que ci-dessus, non ?
Si tu veux ne garder QUE l'extension, il faut ajouter "-o" à grep.
Là encore, les dossiers, ou fichier sans extension mais avec un point dans le chemin seront sélectionné.
De plus, il pourrait être intéressant de trier et dédoublonner la liste en passant via un pipe par "sort -u" par exemple.
ext=$(zenity --entry --width 600 --height 50 --title="sélectionner l'extension" )
Là je comprends pas ... il sélectionne quoi l'utilisateur ?
Il sert à quoi le fichier créé ci-dessus si tu n'en fait rien ?
find $path1/ -regex ".*\/*.$ext$" -exec cp -u --preserve {} /$path2 \;
Elle est bizarre cette expression régulière :
.* : tout les caratères
\/* : une suite de / ... jamais vu de chemins en toto////tata o.O
. : n'importe quel caractère (pas forcément un point "." puisque non échappé
$ext : une variable dans une regex ... je sais pas si ça marche ...
$ : là c'est la fin de la ligne ... OK
Ensuite la commande risque de ne pas marcher non plus :
cp -u --preserve {} /$path2 \;
Je pense que $path2 commencera déjà par un "/", donc ça devient "//toto" par exemple ...
Je te conseille aussi de rajouter l'option "-v" à cp pour débugger et voir ce qu'il tente de copier rééllement.
Pour la variable dans la regex, je me demande si il ne faudrait pas placer un petit "eval" devant tout ça, mais en échappant les caratères nécessaires (ça va être le bordel).
greg2007 a écriten clair le souci vient du fait que la commande find me retourne les chemins comme par exemple "images 2009" au lieu de "images \2009" donc le script ne fonctionne pas ....j'ai pu le vérifier grâce à :
echo $path1 > /home/$user/path
cat /home/$user/path
donc ma question comment arriver à ce que find me retourne les résultats avec la bonne syntaxe?
ça j'en suis pas si sûr, mais tu peux aussi encadrer le {} dans l'exec par des guillements pour conserver un chemin correct pour la commande cp.
ça donnerai (si le regex fonctionne) :
find $path1/ -regex ".*\/*.$ext$" -exec cp -u -v --preserve "{}" $path2/ \;