Je cherche à créer un "dossier de dépôt" dans un lecteur partagé Windows accessible à tous. J'aimerais que les fichiers soient supprimés automatiquement s'ils restent dans le dossier pendant plus de X jours.
Cependant, il semble que toutes les méthodes que j'ai trouvées pour ce faire, utilisent la dernière date de modification, la dernière heure d'accès ou la date de création d'un fichier.
J'essaie d'en faire un dossier dans lequel un utilisateur peut déposer des fichiers à partager avec quelqu'un. Si quelqu'un copie ou déplace des fichiers ici, j'aimerais que l'horloge commence à tourner à ce stade. Cependant, la dernière date de modification et la date de création d'un fichier ne seront pas mises à jour à moins que quelqu'un ne modifie réellement le fichier. Le dernier temps d'accès est mis à jour trop fréquemment ... il semble que l'ouverture d'un répertoire dans l'explorateur Windows mettra à jour le dernier temps d'accès.
Quelqu'un connaît une solution à cela? Je pense que cataloguer le hachage des fichiers quotidiennement, puis expirer les fichiers en fonction de hachages antérieurs à une certaine date pourrait être une solution ... mais prendre des hachages de fichiers peut prendre du temps.
Toutes les idées seraient grandement appréciées!
Remarque:
j'ai déjà examiné pas mal de réponses ici ... j'ai examiné le moniteur de ressources du serveur de fichiers, les scripts PowerShell, les scripts batch, etc. Ils utilisent toujours la dernière heure d'accès, la dernière heure modifiée ou l'heure de création ... qui, comme décrit, ne répondent pas aux besoins ci-dessus.
tmpwatch
.Réponses:
Nous avons utilisé une combinaison d'un script PowerShell et d'une stratégie. La stratégie spécifie que l'utilisateur doit créer un dossier dans le partage Drop_Zone, puis copier les fichiers qu'il souhaite dans ce dossier. Lorsque le dossier atteint 7 jours (à l'aide de CreationTime), le script PowerShell le supprime.
J'ai également ajouté une partie de la journalisation au script powershell afin que nous puissions vérifier son fonctionnement et activer les clichés instantanés juste pour sauver les complètement incompétents d'eux-mêmes.
Voici le script sans tous les trucs de journalisation.
la source
Si vous pouvez supposer NTFS, vous pouvez écrire une clé (Guid) dans un autre flux du fichier. Plus la date, vous pouvez donc stocker la base de données dans les fichiers.
Plus d'informations peuvent être trouvées sur
http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx
Fondamentalement, vous pouvez stocker du contenu supplémentaire dans un flux distinct codé par un nom spécial.
la source
Vous pouvez utiliser IO.FileSystemWatcher, qui vous permet de "surveiller" un dossier pour les nouveaux fichiers créés. Voici les pièces dont vous auriez besoin pour que cela fonctionne.
Ces variables configurent le chemin à surveiller et un filtre pour affiner les fichiers à suivre:
Cela définit les paramètres du dossier à surveiller et les actions à effectuer lorsque l'événement se produit. Fondamentalement, cela réinitialise le LastWriteTime sur chaque fichier tel qu'il est écrit:
L'événement peut être annulé si nécessaire en utilisant ceci:
Enfin, vous pouvez l'exécuter une fois par jour afin de nettoyer les anciens fichiers:
Cela devrait être tout ce dont vous avez besoin ...
la source
Cela fait un moment mais j'ai mis en place une méthode relativement simple pour résoudre ce problème.
Je toucherais tous les fichiers ajoutés au répertoire de dépôt (surveillé via un utilitaire de surveillance des ressources) et définirais la dernière date de modification à la date ajoutée au dossier.
Je pourrais alors utiliser la dernière date modifiée pour purger tous les fichiers qui doivent être vieillis. Cela a également l'avantage que si quelqu'un met vraiment à jour le fichier, il réinitialisera le compte à rebours.
la source
Il n'y a aucun moyen de se fier aux dates auxquelles un fichier a été copié ou déplacé dans un dossier. Windows parvient à le conserver sur les systèmes de fichiers, les lecteurs, les partages réseau, etc. Vous pouvez peut-être travailler avec un serveur de fichiers Linux ou empêcher les gens de copier directement des fichiers à l'aide de FTP ou d'un système de téléchargement basé sur le Web.
Si vous êtes d'accord avec les personnes ne pouvant pas modifier les fichiers après leur téléchargement, vous pouvez avoir des dossiers de téléchargement et d'accès séparés, et un script qui déplace les fichiers entre eux et les remodèle. Mais il semble que vous souhaitiez que les utilisateurs puissent modifier directement les fichiers.
Donc, une solution simple, quoique quelque peu hacky, serait de jouer avec les dates. J'écrirais deux scripts:
Script de changement de date horaire
Faites exécuter un script environ une fois par heure, dans votre langue préférée, qui:
En PowerShell, cela ressemblerait à ceci:
L'exécution de ce script aujourd'hui (27 mai) définit la date de modification de tous les fichiers au 1er juin 1994 - il y a exactement 356 * 20 jours. Parce qu'il ne modifie que les fichiers plus récents que la valeur $ before, il ne touchera pas les fichiers qu'il a déjà définis dans le passé.
Script de nettoyage
Le script de nettoyage s'exécuterait tous les soirs et:
Je n'écrirai pas le script de cette partie - il existe de nombreux utilitaires qui peuvent gérer la suppression de fichiers plus anciens qu'une date spécifiée, choisissez celui que vous aimez. La partie importante est de rechercher les fichiers qui ont plus de 7300 jours X, où X est le nombre de jours que vous souhaitez les conserver depuis leur dernière modification.
Les avantages
Cela présente quelques avantages par rapport aux autres réponses ici:
Le seul problème que je peux voir est que les gens copient un fichier modifié pour la dernière fois il y a 20 ans dans le dossier de dépôt. Je pense que dans la plupart des scénarios, ce n'est probablement pas un gros problème, mais cela pourrait se produire.
la source
Vous pouvez formaliser l'ajout de fichiers à la boîte de dépôt via une page Web, qui a un IFRAME "upload". L'utilisateur pourrait alors "publier" le fichier, qui invoque un travail PHP / ASP sur le serveur, qui prend le fichier et le place à l'emplacement du pucker. Le PHP / ASP pourrait effectuer n'importe quel nombre d'opérations d'indexation / d'analyse.
la source
Je voudrais créer un script qui s'exécute en tant que tâches planifiées toutes les cinq minutes et fait deux choses.
la source
Il existe un mécanisme existant pour marquer les fichiers, le bit d'archive. Il existe depuis les premiers jours de DOS et est présent sur FAT et NTFS.
Fondamentalement, chaque fichier aura son bit d'archivage défini par défaut. Si vous voyez un fichier avec le bit d'archive dans votre dossier de dépôt, (1) effacez ce bit et (2) définissez sa date sur aujourd'hui. Si vous voyez un fichier sans ce bit et avec une date <= 7 jours dans le passé, supprimez-le.
Si un utilisateur écrit dans le fichier alors qu'il se trouve dans le dossier de dépôt, son bit d'archivage est à nouveau défini de sorte que sa durée de vie est également réinitialisée à 7 jours. Il s'agit en fait d'un nouveau fichier, après tout.
Vous pouvez désormais utiliser FileSystemWatcher en toute sécurité. Tous les problèmes rencontrés (tels que les événements en double, le débordement de la mémoire tampon et la perte d'informations détaillées) n'ont plus d'importance car les informations pertinentes figurent toutes dans les métadonnées du fichier.
la source