Trier des fichiers
Résolu/Fermé
Elponito
Messages postés
51
Date d'inscription
vendredi 23 mai 2014
Statut
Membre
Dernière intervention
21 décembre 2015
-
30 mai 2014 à 09:27
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 juin 2014 à 09:53
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 juin 2014 à 09:53
A voir également:
- Trier des fichiers
- Excel trier par ordre croissant chiffre - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Application gratuite pour trier les photos - Guide
7 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
Modifié par gravgun le 30/05/2014 à 20:21
Modifié par gravgun le 30/05/2014 à 20:21
'lut, en Python 3:
@fiddy: 18 lignes ;)
(et une redondance de code de fou: ça peut être beaucoup plus clean mais ça marche)
from human import idiocy
del idiocy
import os, time year = 365*24*60*60 source = "/tmp/src" dest = "/tmp/bak" def backup(root, filename): os.makedirs(os.path.join(dest, root[len(source)+1:]), exist_ok=True) os.rename(os.path.join(root, filename), os.path.join(dest, root[len(source)+1:], filename)) for root, direc, filenames in os.walk(source): for filename in filenames: if filename.lower().endswith(('.ppt', '.pptx')): if time.time() - os.path.getatime(os.path.join(root, filename)) > 2*year: backup(root, filename) if filename.lower().endswith(('.jpg', '.avi')): if time.time() - os.path.getatime(os.path.join(root, filename)) > 3*year: backup(root, filename)
@fiddy: 18 lignes ;)
(et une redondance de code de fou: ça peut être beaucoup plus clean mais ça marche)
from human import idiocy
del idiocy
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
Modifié par fiddy le 30/05/2014 à 19:49
Modifié par fiddy le 30/05/2014 à 19:49
En C, tu peux utiliser struct stat.
Par exemple :
Pour afficher la date sous forme intelligible, tu peux utiliser les fonctions du header time.h.
Ensuite, il faudra que tu fasses une boucle pour parcourir tous les fichiers de ton disque, puis que tu mettes tout ceci dans une liste. Que tu tries la liste, etc. Si c'est juste pour te faire un petit outil, je le ferai plutôt en python.
En python, ça se fait très facilement. Probablement en 1 quinzaine de ligne :-). En C, plutôt 150...
Après, à toi de voir si le python te fait peur ou pas :-). Sachant que d'autres langages de script sont également possibles.
Google is your friend
Par exemple :
struct stat buffer; stat(nomFichier, &buffer); printf("Date de dernier acces : %ld\n", buffer.st_atime);
Pour afficher la date sous forme intelligible, tu peux utiliser les fonctions du header time.h.
Ensuite, il faudra que tu fasses une boucle pour parcourir tous les fichiers de ton disque, puis que tu mettes tout ceci dans une liste. Que tu tries la liste, etc. Si c'est juste pour te faire un petit outil, je le ferai plutôt en python.
En python, ça se fait très facilement. Probablement en 1 quinzaine de ligne :-). En C, plutôt 150...
Après, à toi de voir si le python te fait peur ou pas :-). Sachant que d'autres langages de script sont également possibles.
Google is your friend
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
30 mai 2014 à 12:04
30 mai 2014 à 12:04
Bonjour
C'est possible de le faire par programmation, pour cela il te faut utiliser la structure
à bientôt
C'est possible de le faire par programmation, pour cela il te faut utiliser la structure
struct statpour connaitre les attributs de ton fichier comme, la date de la dernière modification/acces, le droit utilisateur/groupe etc
à bientôt
Elponito
Messages postés
51
Date d'inscription
vendredi 23 mai 2014
Statut
Membre
Dernière intervention
21 décembre 2015
8
30 mai 2014 à 14:25
30 mai 2014 à 14:25
Merci pour la réponse je vais regarder cela :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
Modifié par fiddy le 30/05/2014 à 16:36
Modifié par fiddy le 30/05/2014 à 16:36
Bonjour,
La bibliothèque standard du C ne permet pas de faire ça.
En revanche, en utilisant les fonctions propres à ton OS, cela devient possible.
Sur quel OS tu es ? Windows ?
Pourquoi ne pas le faire dans un autre langage ? Il y en a des beaucoup plus adaptés pour ce genre de tâches.
Cdlt,
Google is your friend
La bibliothèque standard du C ne permet pas de faire ça.
En revanche, en utilisant les fonctions propres à ton OS, cela devient possible.
Sur quel OS tu es ? Windows ?
Pourquoi ne pas le faire dans un autre langage ? Il y en a des beaucoup plus adaptés pour ce genre de tâches.
Cdlt,
Google is your friend
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
30 mai 2014 à 16:40
30 mai 2014 à 16:40
La cstdlib ne le permet pas, en effet, mais ça peut se faire indépendamment de l'OS vu que ce qu'il demande (liste de fichiers, vérif d'extension et de date) peut se faire avec opendir et la struct stat définies par le standard POSIX(.1-2001).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
30 mai 2014 à 17:44
30 mai 2014 à 17:44
cstdlib, ce n'est pas une bibliothèque mais un header. De plus ce n'est pas du C mais du C++.
Ensuite, même si beaucoup le sont, tous les OS ne sont pas full-compatible avec la norme POSIX.1-2001. Voilà pourquoi il faut toujours demander l'OS lorsqu'on est sur des fonctionnalités non standard ISO C89/90 ou C99...
Ensuite, même si beaucoup le sont, tous les OS ne sont pas full-compatible avec la norme POSIX.1-2001. Voilà pourquoi il faut toujours demander l'OS lorsqu'on est sur des fonctionnalités non standard ISO C89/90 ou C99...
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
30 mai 2014 à 17:55
30 mai 2014 à 17:55
Oui c'est juste que j'ai utilisé le nom "raccourci"... Quant au respect des standards, je sais. J'anticipais juste l'éventuelle option d'écrire du code spécifique a la plateforme (
OpenFileou
open)
Elponito
Messages postés
51
Date d'inscription
vendredi 23 mai 2014
Statut
Membre
Dernière intervention
21 décembre 2015
8
30 mai 2014 à 17:15
30 mai 2014 à 17:15
Merci pour vos réponse :)
En effet fiddy je suis sur Windows, pourquoi en C, car je ne sais pas dans quel autre langage le faire, mais si tu connais un langage plus adapté je suis preneur. Pour exposer un peux plus en détail mon problème, je suis actuellement en stage et l'on a un serveur de fichier sur lequel il y a certains fichiers qui n'ont pas lieu d'être, je doit donc mettre en place une routine, qui permet à partir de règle que j'ai définie de faire un tri sur les fichier. J'ai donc un poste sur lequel sera lancé la routine, le but est donc de parcourir l'arborescence en appliquant les règles, par exemple:
*.ppt: Si non consulté depuis plus de 2 ans -> déplacement vers une sauvegarde en locale
*.xsl: Ne pas toucher.
*.jpg: Si non consulté depuis plus de 3 ans -> déplacement vers une sauvegarde en locale
*.avi: Si non consulté depuis plus de 3 ans -> déplacement vers une sauvegarde en locale
voila en gros, je suis preneur de toutes vos idées car je sais pas trop ver quelle technologie me tourner...
Merci d'avance
En effet fiddy je suis sur Windows, pourquoi en C, car je ne sais pas dans quel autre langage le faire, mais si tu connais un langage plus adapté je suis preneur. Pour exposer un peux plus en détail mon problème, je suis actuellement en stage et l'on a un serveur de fichier sur lequel il y a certains fichiers qui n'ont pas lieu d'être, je doit donc mettre en place une routine, qui permet à partir de règle que j'ai définie de faire un tri sur les fichier. J'ai donc un poste sur lequel sera lancé la routine, le but est donc de parcourir l'arborescence en appliquant les règles, par exemple:
*.ppt: Si non consulté depuis plus de 2 ans -> déplacement vers une sauvegarde en locale
*.xsl: Ne pas toucher.
*.jpg: Si non consulté depuis plus de 3 ans -> déplacement vers une sauvegarde en locale
*.avi: Si non consulté depuis plus de 3 ans -> déplacement vers une sauvegarde en locale
voila en gros, je suis preneur de toutes vos idées car je sais pas trop ver quelle technologie me tourner...
Merci d'avance
Elponito
Messages postés
51
Date d'inscription
vendredi 23 mai 2014
Statut
Membre
Dernière intervention
21 décembre 2015
8
30 mai 2014 à 23:06
30 mai 2014 à 23:06
Merci beaucoup pour ces réponses :) Je vais me pencher sur le python :)
Elponito
Messages postés
51
Date d'inscription
vendredi 23 mai 2014
Statut
Membre
Dernière intervention
21 décembre 2015
8
Modifié par Elponito le 2/06/2014 à 10:34
Modifié par Elponito le 2/06/2014 à 10:34
Vous êtes trop top fiddy et gravgun, merci pour votre aide, cela me permet de découvrir un nouveau langage en plus :) je laisse le sujet ouvert, je posterais si je rencontre des difficultés, ce qui risque d'arriver puisque je découvre python :p
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
3 juin 2014 à 09:53
3 juin 2014 à 09:53
Nope. Sujet résolu. Ouvre plutôt un autre post si tu as des.questions en python (dans la catégorie du même nom.)
30 mai 2014 à 21:14
Du coup, ça fait 15 tout pile. Belle estimation n'est-ce pas ? :-p
2 juin 2014 à 09:11
pas mal comme code personnellement je ne suis pas trop à l'aise avec le python même si je trouve ce langage extrêmement puissant ceci dit c'est bien
à bientôt
Modifié par Elponito le 2/06/2014 à 11:21
Je rencontre un problème lorsque je veux utiliser un lecteur différent, si je lance le code de gravgun sur C: je n'ai pas de problème, en revanche si je spécifie le chemin source = "E:/src" et la destination dest = "/tmp/bak" (sur C du coup), cela ne fonctionne pas, l'erreur est: "OSError: [WinError 17] Impossible de déplacer le fichier vers un lecteur de disque différent" (par contre si j'execute tout sur E cela marche niquel également) si vous avez une idée d'où ça peut venir :p
2 juin 2014 à 11:33
Personnellement je ne suis pas trop apte à pouvoir t'aider sur du python, le mieux est de poser directement la question à @gravgun, pour ce qui est du chemin je pense que le programme ne permet que d'explorer tous les sous-dossiers dans le quelle il est executé enfin (corrigé moi si je me trompe)
2 juin 2014 à 16:20