| | ludoweb13 | Posté le 04/01/2006 @ 22:39 | Petit astucien
6 Messages
| Salut à tous, et très bonne année 2006,
Voilà à nouveau j'ai besoins de vos lumières.
Dans mon Entreprise nous utilisons OpenOffice sous Mandriva 2006, sur 5 PC, nous avons la dernière version de OpenOffice 2.01, jusque là pas de problème.
Par contre, comme nous avons plusieurs centaines de fichiers en *.sxw pour le traitement de textes, et idem pour calc, etc...
à chaque fois que nous ouvrons un fichier en *.sxw, lors de la sauvegarde"conversion" *.dot, il y a souvent un blème... souvent il est enregistré 2 fois, avec son propre dossier dupliqué, là me demandez par le pourquoi... Par contre lorsque l'on renomme à la main un *.sxw en *.dot, que l'on ouvre par la suite, sa sauvegarde est très bien faite.
D'où ma question : Existe-t-il une formule en console qui permettrait de renommer l'ensemble de nos fichiers *.sxw en *.dot
et ceci en prenant en compte ques ces fichiers sont dissiminés dans de nombreux dossiers et sous dossiers.
Merci pour votre aide.
Ludo.
| | |
| |
| Publicité |
|
| | ssssseb | Posté le 04/01/2006 à 23:29 | Astucien
1570 Messages
| Salut ludo ! [hello]
Je ne comprends pas très bien le problème, mais voici une solution possible que tu peux entrer dans la console [bigsmile]...
D'abord, il faut savoir dans quel(s) dossier(s) se trouvent les documents à convertir. Je supposerai ici que c'est dans /home/bob/documents, mais tu pourras bien sûr remplacer par ce qui convient.
La commande qui te fera tout ça :
[code]for i in $(find /home/bob/documents -type f -name "*.sxw"); do rename 's/\.sxw$/.dot/' $i; done[/code]
Je ne suis pas sûr que ce soit la méthode la plus efficace, mais ça marche bien quand même [timide]...
[chinois]
Modifié par ssssseb le 05/01/2006 00:11 | | | | | ludoweb13 | Posté le 05/01/2006 à 00:02 | Petit astucien
6 Messages
| Salut, Seb,
Merci pour ta réponse très rapide... Je constate que l'entraide sur les forum linux est toujours aussi réactive...
Dès que je suis au Bureau, demain matin, j'essaie et je te tiens au courant
Par acquit de conscience, j'ai voulu essayer chez moi, sur mon pc perso, mais rien ne se passe... mes quelques fichiers *.sxw restent toujours avec la même extension, pas de modif en *.dot...
J'ai bien copié ta formule mais quid de modif...
Aurais-je loupé quelque chose, dois-je me mettre en root pour effectuer cette modif.
Merci pour ta réponse.
Ludo. | | | | | ssssseb | Posté le 05/01/2006 à 00:11 | Astucien
1570 Messages
| Resalut ludoweb13 ! [hello]
Par acquit de conscience, j'ai voulu essayer chez moi, sur mon pc perso, mais rien ne se passe... mes quelques fichiers *.sxw restent toujours avec la même extension, pas de modif en *.dot...
Pourtant j'ai testé de mon côté, et ça a fonctionné [confus]. J'ai créé par exemple 100 fichiers .sxw dans un Répertoire, 100 autres dans un sous-répertoire et encore 100 autres dans un autre sous-répertoire comme suit :
[code]mkdir test ; cd test
mkdir d1 d2
for i in $(seq 1 100); do touch test_$i.sxw; done; cd d1
for i in $(seq 1 100); do touch test_$i.sxw; done; cd ../d2
for i in $(seq 1 100); do touch test_$i.sxw; done; cd ..
for i in $(find . -type -f -name "*.sxw"); do rename 's/\.sxw$/.dot/' $i; done[/code]
Je retente sur-le-champ pour être certain... Statut du test : OK
Remplace find /home/bob/documents -type -f -name "*.sxw" par le Répertoire approprié surtout [clindoeil].
EDIT : Il faut que les fichiers t'appartiennent pour que tu puisses les modifier (simple vérification [langue]).
Redonnes-en-moi des nouvelles ! [chinois] Modifié par ssssseb le 05/01/2006 00:13 | | | | | ludoweb13 | Posté le 05/01/2006 à 12:08 | Petit astucien
6 Messages
| Resalut Seb,
Donc les toutes dernières nouvelles,
J'ai essayé au Bureau, et bien nada, rien ne se passe;
J'ai même fait la manipe sur plusieurs PC sous mandriva 2006, là aussi, rien ne se passe, aucune modif.
A chaque fois, j'ai bien mis le /home/.... spécifique à chaque dossier, mais toujours rien...
Serait-ce Mandriva 2006 qui pose problème.
Merci encore à toi pour ton aide.
Ludo. | | | | | ssssseb | Posté le 05/01/2006 à 19:34 | Astucien
1570 Messages
| Resalut ludoweb13 [hello]
Tu mets bien cette commande ? =>
[code]for i in $(find /home/... -type -f -name "*.sxw"); do rename 's/\.sxw$/.dot/' $i; done[/code]
Dans ce cas, je serais curieux de voir ce que te donne ceci :
for i in $(find . -type -f -name "*.sxw"); do rename 's/\.sxw$/.dot/' $i; done 2> /home/bob/fichier_sxw_a_dot.txt
Tu devrais en principe avoir des erreurs qui seront affichées dans fichier_sxw_a_dot.txt (en n'oubliant pas de remplacer bob par le bon Répertoire).
OUBLIE ÇA [dent][dent][dent]...
J'ai fait l'erreur la plus idiote qu'il était possible de faire : te fournir une commande invalide (c'est -type f et non pas -type -f) [pleurer]... Mais je remarque que c'est ce que je t'avais mis au début, donc voyons voir ce que donne les erreurs en ajoutant 2> /home/ton_repertoire/test_erreur.txt.
D'abord, on va s'assurer qu'il n'y ait pas d'espace dans les noms de fichiers :
for a in $(find /home/ton_repertoire -type f);do b=$(echo $a | sed -e 's/[[:blank:]]/_/g'); if [ -e "$b" ];then echo "">/dev/null; else mv "$a" "$b"; fi; done
Une fois ceci fait, la commande suivante devrait fonctionner également (désolé encore [langue]) :
for i in $(find /home/ton_repertoire -type f -name "*.sxw"); do rename 's/\.sxw$/.dot/' $i; done 2> /home/ton_repertoire/test_erreur.txt
Si ça ne marche pas, dis-nous ce que tu as dans le fichier test_erreur.txt [triste].
J'espère que ça sera bon cette fois [grincheux].
Bonne chance et à bientôt ! [chinois] Modifié par ssssseb le 05/01/2006 19:38 | | | | | ludoweb13 | Posté le 05/01/2006 à 19:56 | Petit astucien
6 Messages
| Resalut Seb,
D'abord, on va s'assurer qu'il n'y ait pas d'espace dans les noms de fichiers :
j'ai entrée ta formule, après l'invite $ rien...
Une fois ceci fait, la commande suivante devrait fonctionner également (désolé encore ) :
ta formule une fois entrée, après l'invite $ rien... et dans mon dossier apparaît le fichier "test_erreur.txt", mais à l'intérieur rien...
Les fichiers en *.sxw sont toujours là...
Que dois-je faire maintenant??? mofifier mes fichiers un à un.
Désolé pour tout ce tracas...
A+
Ludo.
| | | | | ssssseb | Posté le 05/01/2006 à 20:05 | Astucien
1570 Messages
| C'est moi qui est désolé [confus]...
Pourtant chez moi ça fonctionne bien. Je suis en train de te faire un petit script à la place, car là [bigsmile]...
Je te reviens sous peu, pardonne-moi [rougir].
Avancée #1 : Un truc coince en utilisant find dans certains cas, je vais tenter de voir pourquoi [grincheux].
Modifié par ssssseb le 05/01/2006 20:12 | | | | | ssssseb | Posté le 05/01/2006 à 20:29 | Astucien
1570 Messages
| [bigsmile]...
Pour supprimer les espaces dans tes noms de fichiers, est-ce que la commande suivante fonctionne ?
find /home/le_repertoire -depth -name "*\ *" -exec rename 's/\ /_/g' {} \;
Si tu veux éviter de tout bousiller, je te recommande de créer un Répertoire test dans lequel tu mettras plusieurs fichiers :
cd ~; mkdir test; cd test; for i in $(seq 1 50); do touch fichier#${i}.sxw; done
Ainsi que quelques fichiers avec des espaces :
for i in $(seq 1 10); do touch fic\ #$i.txt; done
Alternativement, tu peux aussi créer des sous-répertoires avec des fichiers dans l'un d'eux pour voir si la récursivité est présente :
mkdir d1 d2 d3 d4 d5; cd d1; for i in $(seq 1 25); do touch mon_fichier#$i.sxw; done; cd ..
Je cherche toujours de mon côté [clindoeil].
[chinois] Modifié par ssssseb le 05/01/2006 20:30 | | | | | ssssseb | Posté le 05/01/2006 à 21:05 | Astucien
1570 Messages
| Bon j'ai fini par trouver quelque chose qui évite les boucles en n'utilisant que find [happy].
Je te le mets sous forme de script, car c'est plus pratique (et tu pourras ensuite repasser des .dot aux .sxw très facilement) :
#!/bin/bash
##########################################################
# Script qui renomme les fichiers récursivement
# (tous les sous-répertoires sont pris en compte)
# pour un suffixe donné.
# Ex : Tous les fichiers .sxw seront transformés en .dot
##########################################################
# Extension à renommer
extension1='.sxw'
# Extension voulue
extension2='.dot'
# Répertoire à partir duquel l'on devra
# renommer les fichiers ciblés
repertoire="/home/ ton_repertoire"
# Remplace toutes les espaces par des soulignés : _
find ${repertoire} -depth -name "*\ *" -exec rename 's/\ /_/g' {} \;
# Étape de renommage des fichiers de l'extension1 à l'extension2
find ${repertoire} -type f -name "*${extension1}" -exec rename "s/${extension1}$/${extension2}/" {} \;
# Affiche un message de fin
echo "Tous vos fichiers ${extension1} ont été soigneusement renommés en ${extension2}."
Colle donc ceci dans le Répertoire souhaité (tant que tu mets le chemin complet à cette ligne repertoire="/home/ton_repertoire"), appelle le fichier comme tu veux ( sxw_dot.sh par exemple) et rends-le exécutable :
[code]chmod 700 /emplacement/de/sxw_dot.sh[/code]
Ensuite, exécute-le (après avoir modifié ton_repertoire !), ça devrait bien passer cette fois (mais je te réécris pour être certain que je t'encourage à tester ceci dans un Répertoire de test que tu auras créé [langue]).
Bonne chance camarade ! [chinois] Modifié par ssssseb le 05/01/2006 21:07 | | | | | ludoweb13 | Posté le 05/01/2006 à 21:57 | Petit astucien
6 Messages
| Salut à toi, Oh Seb,
Merci beaucoup pour ta sollicitude, je vois qu'avec linux, l'entraide fonctionne plus que bien, j'en suis même plus qu'agréablement surpris...
Concernant tes nouvelles directives, je serai plus tranquille demain matin. Dès mon arrivée au Bureau, je m'y mets sérieusement, et je te tiens au courant dans mes pérégrination... j'espère cette fois pour un bon résultat...
Merci encore pour ton aide ; Vive le libre!!!!
A+
Ludo. | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|