Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/02/2007, à 06:00

Compte anonymisé

Programme pour renommage

Bonjour,

Voilà, avec un ami nous avons remarqué que peu de programmes avec un lot d'options existaient pour renommer des fichiers par lot sous linux. Donc on s'est mis en tête d'en créer un. Mais nous avons besoin de vous pour des améliorations et de vos conseils. Je vous invite à aller sur le site de l'auteur pour voir son travail et si possible de l'aider par vos idées en vue de l'améliorer.

http://linuxvsmacosx.googlepages.com/

Merci par avance de vos aides.
Bye.

Dernière modification par Compte anonymisé (Le 16/02/2007, à 06:04)

#2 Le 16/02/2007, à 11:22

l'autre

Re : Programme pour renommage

euh, comment on le teste? Edit: ok, c'est

Pour l'instant, j'utilise thunar --bulk-rename qui marche pas mal (paquet thunar). ça peut peut-être vous donner des pistes pour votre code. Il y a aussi krename je crois, mais c'est du qt sad

Dernière modification par l'autre (Le 16/02/2007, à 12:23)


Si tu donnes à quelqu'un un poisson que tu as volé, il mangera une fois. Si tu lui apprends à voler, il mangera toute sa vie

Hors ligne

#3 Le 16/02/2007, à 12:02

mesmento

Re : Programme pour renommage

Krename est très très complet dans ce domaine.

Cela dit, le projet à l'air intéressant !
Je vais jeter un œil aux sources wink

Hors ligne

#4 Le 16/02/2007, à 12:23

aleph

Re : Programme pour renommage

> golgot200
Voilà, avec un ami nous avons remarqué que peu de programmes avec un lot d'options existaient pour renommer des fichiers par lot sous linux....

---

En fait, il y a une certaine logique à ce manque. Un administrateur ou programmeur expérimenté trouvera son bonheur avec probablement bash ou à coup sur Python. Par ex., Python propose un module de filtrage de noms de fichiers, fnmatch qui accomplit la partie la plus délicate du travail.

Que cette remarque ne t'ote cependant pas le plaisir de créer ton application.

#5 Le 16/02/2007, à 12:28

Henry de Monfreid

Re : Programme pour renommage

Un petit script nommé upper2low se trouve ici.
Cela vous inspirera peut etre.
smile


« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)

Hors ligne

#6 Le 16/02/2007, à 12:32

l'autre

Re : Programme pour renommage

j'obtiens

Segmentation fault (core dumped)

au lancement de l'exécutable hmm


Si tu donnes à quelqu'un un poisson que tu as volé, il mangera une fois. Si tu lui apprends à voler, il mangera toute sa vie

Hors ligne

#7 Le 16/02/2007, à 16:54

sylvaing01

Re : Programme pour renommage

Bonjour tout le monde, j'écrit Renfile avec Golgot200, bon pour ceux qui on regardé dans le code source ils ont remarqués que je débute en programmation donc faites gaffe pour l'instant, ne l'utilisez pas sur des fichiers sans faire de copie. Je m'emploie actuellement à intégrer la copie dans le programme justement pour éviter ces accidents, mais c'est pas facile. Alors soyez patient.

Autre chose: je l'ai appelé Renfile, mais çà existe déjà, si quelqu'un a une idée de nom original çà serait pas mal, j'ai pas d'idée.

Hors ligne

#8 Le 16/02/2007, à 17:29

sylvaing01

Re : Programme pour renommage

Code:

Segmentation fault (core dumped)


l'autre, je trouve çà étrange, tu le lance comment?
mais j'ai rectifié plusieurs bugs depuis cette version

aleph, tu a raison, mais on a décidé d'écrit un programme en C parce que les scripts, c'est trop long, surtout lorsqu'il y a beaucoup de fichiers à renommer ou sur des vieux PC, nous on voudrait quelque chose de rapide, parce que renommer des fichiers c'est pas lancer un encodage vidéo, ou un rendu 3D, çà doit être instantanné ou tout au moins très rapide.

Pour pinballyoda, je te répondrai la même chose, dans ce script il y a 2 commandes tr et 5 sed, un programme en C est quand même significativement plus rapide.
En tout cas merci pour le lien

Hors ligne

#9 Le 19/02/2007, à 01:30

kaworu

Re : Programme pour renommage

sylvaing01 a écrit :

Pour pinballyoda, je te répondrai la même chose, dans ce script il y a 2 commandes tr et 5 sed, un programme en C est quand même significativement plus rapide.
En tout cas merci pour le lien

Ce qui doit être lent c'est plutôt le disque dur et le FileSystem sur un petit PC. C'est pas vraiment sed/grep qui demande bcp de ressources.


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#10 Le 19/02/2007, à 17:38

sylvaing01

Re : Programme pour renommage

kaworu, tu a raison, les accès disques sont assez lents, mais 5 commandes sed de suite peut prendre plusieurs ms  a ajouter au temps de la commande "rename" ou "mv"(accès au disque), sur plusieurs centaines voir plusieurs milliers de fichiers à renommer, çà se ressent. En tout cas, après test sur quelques dizaines de fichiers, Renfile renomme quasi instantanément, alors qu'un script met près d'une dizaine de secondes.

Cela dit, çà dépend évidemment de la machine.

Hors ligne

#11 Le 23/02/2007, à 19:50

sylvaing01

Re : Programme pour renommage

une petite question :   

précision: c'est mon premier programme en C (mis à part les printf("hello world"); du bouquin), alors j'ai du mal, surtout avec les pointeurs (l'assembleur est quand même 100 fois plus simple là dessus)

Donc,j'ouvre un dossier:

sousdossier = opendir(name);

plus loin j'alloue  un tableau avec realloc:

tabsubf=realloc(tabsubf, (size_t) taille);

et je sauvegarde le pointeur:

*(int *)tabsubf= (int)sousdossier;

et quand je veut récupérer mon pointeur:

sousdossier=*(int *)tabsubf   //edit: c'est sur cette ligne qu'est l'erreur

çà fonctionne très bien, sauf que à la compile j'ai une erreur:

warning: assignment makes pointer from integer without a cast

quelqu'un pourrait me dire comment faire pour que j'ai pas cette erreur.

Je précise que çà compile quand même et que çà fonctionne très bien.

J'ai essayé pas mal de truc, mais pas moyen, quelqu'un aurait il une solution?:|

Dernière modification par sylvaing01 (Le 23/02/2007, à 19:52)

Hors ligne

#12 Le 23/02/2007, à 22:56

any

Re : Programme pour renommage

warning: assignment makes pointer from integer without a cast

c'est pas une erreur au sens strict , c'est un warning comme ca l'indique .
parcque tu assigne un pointer a un entier dans ton code sans caster.  big_smile

tu peux le resoudre par l'option de compilation -Wno- big_smile
mais ce n'est pas une bonne idee lol , ca permute sur off les warnings smile

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

sinon plus serieusement (mais sans trop voir le code et les declarations)
je dirais que c'est surement du au fait que  sousdossier est du type DIR* et non *(int *).

donc pour      sousdossier=*(int *)tabsubf;
je verais plus sousdossier =(DIR *)tabsubf ;

#13 Le 23/02/2007, à 23:08

sylvaing01

Re : Programme pour renommage

Merci Any, encore une fois tu me sauve la mise!

En fait j'avait bien fait çà au début, mais j'avais plein d'erreurs, donc j'avait changé et essayé plein d'autres trucs. Jusqu'à ce que je trouve sur un forum qu'il fallait rajouter #include <malloc.h> pour plus avoir d'erreurs avec realloc et quelques autres erreurs liées.

En tout cas merci, c'est niquel!

Hors ligne

#14 Le 23/02/2007, à 23:14

sylvaing01

Re : Programme pour renommage

ah non! mince çà marche plus! pourtant j'ai bien déclaré DIR *sousdossier
bizarre:/

Hors ligne

#15 Le 24/02/2007, à 01:29

any

Re : Programme pour renommage

ben je connais pas ton programme et je sais pas ce qu'il fait ,
mais tu devrais regarder des exemples avec les fonctions de dirent et sys/stat

http://linux.about.com/library/cmd/blcmdl3_opendir.htm
http://linux.about.com/library/cmd/blcmdl2_stat.htm
http://www.commentcamarche.net/forum/affich-1699952-langage-c-recuperer-un-dir

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>

void printdir(char *dir, int depth)
{
    DIR *dp;
    struct dirent *entry;
    struct stat statbuf;

    if((dp = opendir(dir)) == NULL) {
        fprintf(stderr,"cannot open directory: %s\n", dir);
        return;
    }
    chdir(dir);
    while((entry = readdir(dp)) != NULL) {
        lstat(entry->d_name,&statbuf);
        if(S_ISDIR(statbuf.st_mode)) {
            /* Found a directory, but ignore . and .. */
            if(strcmp(".",entry->d_name) == 0 ||
                strcmp("..",entry->d_name) == 0)
                continue;
            printf("%*s%s/\n",depth,"",entry->d_name);
            /* Recurse at a new indent level */
            printdir(entry->d_name,depth+4);
        }
        else printf("%*s%s\n",depth,"",entry->d_name);
    }
    chdir("..");
    closedir(dp);
}

#16 Le 24/02/2007, à 22:11

sylvaing01

Re : Programme pour renommage

Merci pour les liens Any, je regarde. Pour ce qui est de mon programme, en fait je veut qu'il parcour tous les sous dossiers d'un dossier spécifié dans la ligne de commande. çà fait 15 jours que je me casse les dents dessus! mais bon j'espère que d'ici la semaine prochaine çà fonctionne, je mettrait évidemment les sources sur mon site.

En fait je veut que le programme renfile, copie des fichiers et renomme ces copies, pas très utile, juste que çà permet de pas faire de bêtise en testant le programme... mais pour un nul dans mon genre, j'avoue que c'est un peu trop dur pour moi.

Enfin bon courage...

Hors ligne