Автоматический цикл многочисленных или больших файлов в корзину

2376
minameismud

Мне было поручено исправить программу поставщика, которая при определенных условиях сбрасывает гигабайты ненужных файлов в каталог журналов. Это заканчивается заполнением машин пользователей. Моя задача состоит в том, чтобы выяснить, как заставить его остановиться без какого-либо исходного кода или дополнительных запущенных процессов, а также без выполнения программы kasplode. Другими словами, я хочу использовать функцию файловой системы для управления ростом.

Одна из моих идей заключалась в том, чтобы сделать жесткую ссылку из этой папки на NUL, как вы могли бы сделать /dev/nullв мире Linux. Однако мои попытки использовать mklinkпрограмму для создания соединения приводят к сообщению, которое говоритLocal volumes are required to complete the operation.

Любые идеи о том, как завершить перекресток, или другие идеи для решения проблемы?

7
из любопытства: зачем тебе это? akira 14 лет назад 0
Симлинки _ не_ такие же, как ярлыки оболочки. Остерегайтесь терминологии. (FWIW, в мире Unix жесткая ссылка на `/ dev / null` встречается редко; символические ссылки встречаются гораздо чаще.) grawity 14 лет назад 0
Больше информации (хотя и не так много) о «NUL» для Windows: http://msdn.microsoft.com/en-us/library/aa939249.aspx Gnoupi 14 лет назад 0
Мне было поручено исправить программу поставщика, которая при определенных условиях сбрасывает гигабайты ненужных файлов в каталог журналов. Это заканчивается заполнением машин пользователей. Моя задача - выяснить, как сделать так, чтобы это прекратилось без какого-либо исходного кода и без использования программы kasplode. minameismud 14 лет назад 0
Произойдет ли сбой программы вашего поставщика, если вы измените уровень разрешений, чтобы запретить доступ на запись к той папке, в которой хранятся его ненужные файлы? Usta 12 лет назад 2
looking at the question(Local volumes are required to complete the operation.), it seems that the program wont function if you don't allow it write log files... is it so? just test it... tumchaaditya 12 лет назад 0

7 ответов на вопрос

1
SecurityMatt

Нет. Жесткие ссылки доступны только внутри NTFS, и файл NUL не является файлом NTFS - это имя WIN32 объекта пространства имен \. \ Devices \ NULL, но вы не можете создать жесткую ссылку на него.

Вы можете создать мягкую ссылку (ярлык) на файл NUL, если хотите, но я не могу понять, почему это будет хорошей идеей.

1
micnolmad

Я просто плюю на идеи, но:

Если у проблемной программы есть переключатели командной строки, возможно, ее можно отключить. Сначала я бы попросил продавца, если вы можете, а можете - нет.

Если программа вендора создает какое-то системное событие, которое читает Windows, возможно, вы можете создать сценарий, который удаляет папку нежелательной почты (batch, cmd или powershell). Если это возможно, не забудьте подождать, пока программа продавца не выполнит дамп.

В крайнем случае нужно настроить запланированное задание для удаления при выходе из Windows. Это требует, чтобы на клиентских машинах было достаточно места, чтобы мусор мог жить в течение сеанса.

Если клиенты являются серверами, то есть нет выхода из системы, установите его на запуск, скажем, каждые 24 часа или как часто это происходит, деленное на 2. Разделить на 2, чтобы уменьшить вероятность двойного мусора, так сказать ...

1
AlwaysLearning

If you can persuade the program to write its log files in the root of a drive letter, say, T:, try

subst T: NUL: 

because then redirection to the bit bucket works, eg things like this work:

echo > T:\some_file 

What won't work are reads from the fake T: drive, folder creation and file read access. Which sorta makes sense, but maybe your app relies on those.

0
jimminycricket

Почему бы просто не написать сценарий, который удаляет все файлы .log, которые регулярно записываются в каталог-нарушитель (или в начале / конце использования программы)? Конечно, это лейкопластырь, пока вы не сможете заставить компанию исправить их программу.

Такие как:

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

Я новичок в PoSH, поэтому этот скрипт может не сработать, но я думаю, что концепция обоснована.

Или более совместимая и, возможно, более простая вещь в пакете: `del \ *.`. Возможно, сначала стоит проверить бесполезный каталог. Bob 12 лет назад 1
0
mogga

Если вам не нужен поврежденный файл журнала, а путь / имя является известной переменной, попробуйте создать его как файл только для чтения от имени root / привилегированного пользователя, чтобы предотвратить его создание.

В качестве альтернативы вы можете создать том / раздел только для чтения или виртуальный диск ограниченного размера, на который вы ссылаетесь, чтобы ограничить размер файла.

Если программе действительно требуется файл журнала для продолжения работы и «kasplodes», когда она не может записать, то вам может потребоваться программное решение, такое как ротация журналов, если вы не смогли передать в ноль.

0
Justin Buser

Вы можете создать отдельного пользователя Windows для запуска программы (должна быть защищенная паролем учетная запись), а затем щелкнуть правой кнопкой мыши диск, на который записываются журналы, и выбрать свойства. Затем нажмите на вкладку «Квота» и настройте квоту дискового пространства для этого пользователя. Наконец, удерживайте нажатой клавишу shift и щелкните правой кнопкой мыши по файлу .exe, который запускает программу, и выберите «Запуск от имени другого пользователя», выбрав только что созданную учетную запись.

-1
dag729

Если вы предпочитаете жесткую ссылку, то вам придется пойти с

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

Я сомневаюсь, что это сработает; `NUL` не является реальным файлом и не имеет никаких ссылок. grawity 14 лет назад 0
Не имеет. «Для выполнения операции требуются локальные тома NTFS». minameismud 14 лет назад 0