Création automatique de dossier - Shell/Batch - Programmation
Marsh Posté le 23-08-2015 à 14:29:23
Sous quel OS? Je suppose Windows car apparemment sous Linux il n'y a pas de date de création sauvegardée pour les fichiers...
Voici un truc en Perl bricolé à la va vite, absolument sans garantie, mais qui fonctionne bien chez moi sous XP (oui oui, très vieux ). Faire valider par un pro et/ou tester intensément avant de l'utiliser en prod!
bug connu: ne gère pas les raccourcis, je suppose qu'il y en a pas...
Pour utiliser installer StrawberryPerl (ou ActiveStatePerl mais j'ai pas testé), sauvegarder le script sous script.pl dans le dossier où il y a les fichiers à traiter puis lancer perl script.pl en ligne de commande (ou créer un raccourci).
Si il y a beaucoup de fichiers on peut virer l'affichage, soit les deux print.
Code :
|
Marsh Posté le 23-08-2015 à 17:25:45
Merci énormément, le programme fonctionne parfaitement.
Marsh Posté le 23-08-2015 à 17:51:22
Par contre, comment faire si je veux que le script traite également les sous répertoires ?
Marsh Posté le 23-08-2015 à 20:11:31
Est-ce que les sous-répertoires peuvent contenir à leur tour des sous-répertoires? Si oui jusqu'à quelle profondeur? Faut-il créer le dossier qui porte la date d'un ou plusieurs fichiers à l'endroit où se trouve le fichier ou plutôt à la racine du truc (là où se trouve le script)? Décris avec précision ce que tu as et ce que tu veux obtenir. Par contre je promets rien, faudra voir si j'ai le temps...
Marsh Posté le 23-08-2015 à 20:30:06
Pour ce genre de truc, il y a un module de base standard en perl, File::Find
J'aurais fait un script de ce genre:
Code :
|
(pas testé au delà d'un cas simple avec quelques fichiers, mais ça me semble OK).
Si on veut un message plus explicite pour les messages de sortie en erreur, on peut faire:
die "Erreur: le nom '$cdate' est déjà utilisé par un fichier dans le répertoire $File::Find::dir!"
et
die "Erreur: collision: '$file' existe déjà dans le dossier $File::Find::dir\\$cdate"
A+,
P.S. pour le rongeur combatif, je ne sais pas si tu connaissais l'idiome employé dans le map, qui sert a ajuster une liste numérique retournée par une fonction, mais il est assez sympa.
Marsh Posté le 23-08-2015 à 21:10:52
gilou a écrit : Pour ce genre de truc, il y a un module de base standard en perl |
Il y a un module pour à-peu-près tout en Perl, mais faut le savoir (et faut savoir l'utiliser)... Honnêtement pour moi personnellement j'utilise toujours un truc du genre
Code :
|
Citation :
P.S. pour le rongeur combatif, je ne sais pas si tu connaissais l'idiome employé dans le map, qui sert a ajuster une liste numérique retournée par une fonction, mais il est assez sympa. |
Oulà... Ca c'est encore un truc de "Perl pro". Moi je fais du Perl pour débutant... ;-)
Citation : $::PROGRAM = basename $0; |
C'est quoi cette syntaxe $::XYZ?
Bon, à priori le problème est réglé...
Marsh Posté le 23-08-2015 à 21:38:39
Effectivement, le problème est réglé. Ca m'a donné envie de me mettre à la programmation...
Merci beaucoup pour votre temps.
Marsh Posté le 23-08-2015 à 22:02:03
rat de combat a écrit : |
Tout a fait, mais File::Find fait partie des trucs très standard. C'est une transposition de la commande find unix
rat de combat a écrit :
|
Ça permet d'avoir une variable globale sans faire hurler use strict; :D
Lorsqu'il rencontre $::XYZ, l'interpréteur sait que c'est une variable dont la portée est le package $main ($:: est une abréviation pour $main::) bref que c'est une variable de package, qui est donc dans un autre namespace que les variables lexicales, pour lesquelles la portée est explicitement indiquée avec l'emploi de my, state, our ou local
A+,
Marsh Posté le 23-08-2015 à 22:26:08
Note: Pour que le code soit portable sous Unix & Co, j'ai remplacé les deux '\\' par deux '/' dans le code posté précédemment. Ça m'a sauté aux yeux en relisant.
A+,
Marsh Posté le 31-08-2015 à 16:21:42
gilou a écrit :
|
Moi je ne connais pas (toujours pas) Unix... (mais je finirai par m'y mettre, faudra bien)
gilou a écrit : Ça permet d'avoir une variable globale sans faire hurler use strict; |
Merci pour l'explication!
Marsh Posté le 23-08-2015 à 09:41:40
Bonjour, je cherche un script ou un logiciel qui me permettrait lorsque je l’exécuterai dans un dossier de créer des dossiers portant comme nom la date de création des fichiers (2015.08.23 par exemple) contenus dans le dossier et déplaçant chaque fichier inclus dans chaque dossier correspondant à la date de création.
Je précise que je ne comprend rien en programmation.
Merci