Cycle automatiquement de nombreux fichiers volumineux ou volumineux à la corbeille

7

J'ai été chargé de corriger le programme d'un fournisseur qui, dans certaines conditions, dump les concerts de fichiers indésirables dans un répertoire de journaux. Il finit par remplir les machines des utilisateurs. Ma tâche consiste à comprendre comment le faire s'arrêter sans code source ni processus en cours d'exécution supplémentaire , et sans rendre le programme kasplode. En d'autres termes, je cherche à utiliser une fonctionnalité du système de fichiers pour contrôler la croissance.

Une des idées que j'avais était de créer un lien solide entre ce dossier et NUL, comme vous le feriez /dev/nulldans le monde Linux. Cependant, mes tentatives d’utiliser le mklinkprogramme pour créer une jonction donnent lieu à un message disantLocal volumes are required to complete the operation.

Des idées sur la façon de compléter la jonction, ou d'autres idées pour résoudre le problème?

minameismud
la source
par curiosité: pourquoi avez-vous besoin de cela?
Akira
Les liens symboliques ne sont pas identiques aux raccourcis shell. Attention à la terminologie. (FWIW, dans le monde Unix, un lien dur en /dev/nullest un phénomène rare; les liens symboliques sont beaucoup plus courants.)
grawity
Plus d'informations (mais pas tant que ça) sur le "NUL" pour Windows: msdn.microsoft.com/en-us/library/aa939249.aspx
Gnoupi
J'ai été chargé de corriger le programme d'un fournisseur qui, dans certaines conditions, dump les concerts de fichiers indésirables dans un répertoire de journaux. Il finit par remplir les machines des utilisateurs. Ma tâche consiste à comprendre comment le faire arrêter sans code source et sans rendre le programme kasplode.
minameismud
2
Le programme de votre fournisseur se bloquera-t-il si vous modifiez le niveau d'autorisation pour refuser l'accès en écriture à ce dossier dans lequel il stocke ses fichiers indésirables?
Octobre

Réponses:

1

Non. Les liens physiques ne sont disponibles que dans NTFS, et le fichier NUL n'est pas un fichier NTFS. Il s'agit du nom WIN32 de l'objet d'espace de noms \. \ Devices \ NULL, mais vous ne pouvez pas créer de lien physique.

Vous pouvez créer un lien symbolique (un raccourci) vers le fichier NUL si vous le souhaitez, mais je ne vois pas vraiment pourquoi ce serait une bonne idée.

SecurityMatt
la source
1

Je ne fais que cracher des idées ici mais:

Si le programme problématique a des commutateurs de ligne de commande, il peut être désactivé. Je demanderais d’abord au vendeur, en supposant que vous le puissiez ou non.

Si le programme du fournisseur crée un type d'événement système lu par Windows, vous pouvez éventuellement créer un script qui supprime le dossier de courrier indésirable (batch, cmd ou powershell). Si cela est possible, n'oubliez pas d'attendre que le programme du fournisseur soit terminé.

Le dernier recours consiste à configurer une tâche planifiée à supprimer à la fermeture de session Windows. Cela nécessite que les machines clientes disposent de suffisamment d'espace pour que la corbeille vive pendant la durée de la session.

Si les clients sont des serveurs, donc pas de fermeture de session, configurez-le pour qu'il s'exécute, par exemple toutes les 24 heures ou divisez-le souvent par deux. Diviser par 2 revient à réduire le risque de double ordure pour ainsi dire.

Micnolmad
la source
1

Si vous parvenez à persuader le programme d’écrire ses fichiers journaux à la racine d’une lettre de lecteur, dites: T :, essayez

subst T: NUL:

parce que la redirection vers le compartiment à bits fonctionne, par exemple, comme ceci:

echo > T:\some_file

Ce qui ne fonctionnera pas , ce sont les lectures du faux T: lecteur, création du dossier et accès en lecture au fichier. Quelle sorte a du sens, mais peut-être que votre application en dépend.

Toujours entrain d'apprendre
la source
0

Pourquoi ne pas simplement écrire un script qui supprime tous les fichiers .log qui sont écrits régulièrement dans le répertoire incriminé (ou au début / à la fin de l’utilisation du programme)? Certes, c'est un pansement jusqu'à ce que vous puissiez amener l'entreprise à réparer son programme.

Tel que:

do {}
While (Get-ChildItem C:\problemfile).Count = 0)
Remove-Item "c:\problemfile\*.log"
Write-Host “Program log file cleaned successfully”

Je suis nouveau dans PoSH, donc ce script peut ne pas fonctionner, mais je pense que le concept est valable.

jimminycricket
la source
1
Ou la chose plus compatible et sans doute plus facile dans le lot: del <folderpath>\*.<extension>. Peut-être voudrez-vous tester d'abord sur un répertoire inutile.
Bob
0

Si vous n'avez pas besoin du fichier journal incriminé et que le chemin / nom est une variable connue, essayez de le créer en tant que fichier en lecture seule en tant qu'utilisateur root / privilégié pour empêcher sa création.

Vous pouvez également créer un volume / partition en lecture seule ou un disque mémoire d'une taille limitée vers laquelle vous établissez un lien symbolique, afin de limiter la taille du fichier.

Si le programme nécessite que le fichier journal continue de fonctionner et qu'il utilise 'kasplodes' lorsqu'il ne peut pas écrire, vous aurez peut-être besoin d'une solution programmatique telle que la rotation des journaux si vous ne parvenez pas à diriger vers null.

mogga
la source
0

Vous pouvez créer un utilisateur Windows distinct pour exécuter le programme (il doit s'agir d'un compte protégé par mot de passe), puis cliquer avec le bouton droit sur le lecteur sur lequel les journaux sont écrits et sélectionner les propriétés. Cliquez ensuite sur l'onglet Quota et configurez un quota d'espace disque pour cet utilisateur. Enfin, maintenez la touche Maj enfoncée et cliquez avec le bouton droit sur le fichier .exe qui lance le programme, puis sélectionnez Exécuter en tant qu’utilisateur différent pour sélectionner le compte que vous venez de créer.

Justin Buser
la source
-1

Si vous préférez le lien dur, alors vous devrez aller avec

C:> mklink / h "C: \ Program Files \ MyNewHardlinkFolder" NUL

dag729
la source
Je doute que cela fonctionnerait; NULCe n'est pas un vrai fichier, et il n'a pas de liens.
Grawity
N'est pas. "Les volumes NTFS locaux sont nécessaires pour terminer l'opération."
minameismud