Как удалить старые файлы? (Страница 1) / Десктопные версии Windows / Форум StopLinux

Объявление

Kwork.ru - услуги фрилансеров от 500 руб.

#1 01-09-12 23:45:02

Luca
Участник
Зарегистрирован: 03-09-09
Сообщений: 1,413
Windows 7Firefox 15.0

Как удалить старые файлы?

Есть рейд на 10TB. 6TB уже занято. Всего как-бы не соврать... по-моему более 10 млн. файлов. В основном картинки.

Задача найти приложение, которое бы позволяло удалять все файлы, за исключением содержимого каталога "project" т.е. поддерживала фильтры.

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

Я написал скрипт на PowerShell, тот работает ниебически долго читая все эти миллионы файлов и их аттрибуты, и часов через 6-8 выпадает по указанной причине. Вроде бы ничего не успев удалить. Хотя точно не знаю.

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

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

Неактивен

#2 01-09-12 23:55:13

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Chrome 21.0.1180.83

Re: Как удалить старые файлы?

Выложи скрипт. Можно сделать так: не индексировать все файлы сразу, а по частям, после чего чистить их по дате. Потом создать новый массив с другой частью файлов, и посмотреть так, чтобы ничего не ссылалось на прошлый массив и сборщик мусора сам приберет это говно.

Неактивен

#3 02-09-12 00:27:35

Luca
Участник
Зарегистрирован: 03-09-09
Сообщений: 1,413
Windows 7Firefox 15.0

Re: Как удалить старые файлы?

Babusha, скрипт выложить не могу т.к. он остался на работе, но было что-то короткое.

Если предложишь красивый вариант, желательно в коде, то в понедельник смогу попробовать. В каталоге может быть много подкаталогов и в каждом из них около 1000 - 10000 файлов.

Неактивен

#4 02-09-12 00:27:51

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Chrome 21.0.1180.83

Re: Как удалить старые файлы?

Скорее всего отваливается из-за переисбытка памяти. В PowerShell можно избавляться от богонеугодных обьектов так:

$FileContent = Get-Content Большой-Файл.тхт
# бла бла бла х*й пизда поработали с текстом в файле
$FileContent = $null 
[System.GC]::Collect()

Тут надо будет заново реализовать коммандлет для поиска файлов по частям в массив, а не все сразу. К примеру: взять 1000 файлов и прикончить их, потом следующие 1000. При этом хорошенько чистить память.

Luca пишет:

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

Я вижу два варианта:
1. Линуховые утилиты отвалятся в out of memory, из-за своей негибкости, которая бы не позволила реализовать сложный алгоритм.
2. Линуховые утилиты сработают быстрее и стабильнее, т.к. работают просто с текстом и им не надо гемороится с растратой памяти виртуальной машины.

Добавлено спустя 07 мин 36 с:

Luca пишет:

Если предложишь красивый вариант, желательно в коде, то в понедельник смогу попробовать

Тут понимаешь, за двадцать минут все на шкриптиках забацать не получится. Придется включить мозги. Интересная задача. Хочется посмотреть варианты решения на питоне и баше.

Неактивен

#5 02-09-12 00:41:19

Luca
Участник
Зарегистрирован: 03-09-09
Сообщений: 1,413
Windows 7Firefox 15.0

Re: Как удалить старые файлы?

Babusha, да кстати, вариант на питоне и баше был бы интересен.

По поводу того, что может вылетать по out-if-memory, возможно ты и прав, однако очевидно имеет место и железячный глюк т.к. есть кое-какие другие приколы. Типа система иногда этот хард теряет. Логика потерь не понятна.

Просто проблема в том, что я не могу тестить все подряд реализации т.к. учитывая объем данных на это могут уйти сутки на каждый тест нового кода. Поэтому нужно какое-то решение, которое сходу будет близко к максимально оптимальному.

Неактивен

#6 02-09-12 01:34:24

terminaLtor
Powered by GNU/Linux
Из Интернета
Зарегистрирован: 05-07-10
Сообщений: 1,376
UbuntuChrome 18.0.1025.168

Re: Как удалить старые файлы?

Luca пишет:

Задача найти приложение, которое бы позволяло удалять все файлы, за исключением содержимого каталога "project" т.е. поддерживала фильтры.

find ДИРЕКТОРИЯ -type d -not -name "*XXX*" -delete

задаём -type d, и find вообще не ищет по файлам, только по директориям и удаляет их вместе с содержимым через -delete.

Редактировался terminaLtor (02-09-12 02:36:29)

Неактивен

#7 02-09-12 01:43:13

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Chrome 21.0.1180.83

Re: Как удалить старые файлы?

terminaLtor, как я ждал тупого линохода, не вникшего в проблему, но с find'ом big_smile

Вникай сюда:

Luca пишет:

лагает и система несколько раз в сутки на несколько секунд теряет с ним коннект

Luca пишет:

ниебически долго читая все эти миллионы файлов и их аттрибуты

Твой find повторит судьбу PowerShell. Он отвалится через несколько часов и все.

Редактировался Babusha (02-09-12 01:44:29)

Неактивен

#8 02-09-12 10:11:35

linupzer
Участник
Зарегистрирован: 29-12-10
Сообщений: 86
Windows XPSafari 533.9

Re: Как удалить старые файлы?

Luca пишет:

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

не надо косить под линукс-Ыспециалиста.

robocopy "source path" "\Device\Null" /E  /MOV /MINAGE:150 /XD "path exclude dir"

про логи и обрыв соединения см. справку по робокопи


лИнус прикажет - дураки найдутся

Неактивен

#9 02-09-12 13:04:49

Luca
Участник
Зарегистрирован: 03-09-09
Сообщений: 1,413
Windows 7Firefox 15.0

Re: Как удалить старые файлы?

terminaLtor пишет:

задаём -type d, и find вообще не ищет по файлам, только по директориям и удаляет их вместе с содержимым через -delete.

Как тут время создания файла задается? Приведи пример как задать дату "старше чем пол года".

petrun, к сожалению тут не иначе как Linux целиком нужно будет ставить т.к. все использованные утилиты сугубо под nix, поэтому проверить вряд ли получится. Вот в рамках отдельных портов это еще можно было бы...

Бродяга пишет:

Уж больно повершелл не хотелось учить, чота он мне никак не дается.

Он очень прост для таких задач... На нем код реально в 3-4 раза более короткий и более читабельный получается...

Бродяга пишет:

Лука, а там вложенность каталогов глубокая?

до 7 уровней, если считать от корня диска.

Бродяга пишет:

Не понял все же задачу - а почему нельзя сразу удалять файлы попадающие под условие и периодически помечать, скажем, в локальном текстовом файле, где был в последний раз, а после рестарта начинать с этого места?

Я не понимаю что происходит. Я запускаю скрипт на PowerShell, который вроде бы должен читать все файлы в массив и далее foreach'ем пробегать по ним и удалять все, дата которых значится как "более полугода назад".

Однако скрипт начинает очень долго думать. Уходят долгие часы. В прошлый раз прошло около 6 часов после чего я получил ошибку доступа -- видимо была короткая потеря связи и все оборвалось.

Неактивен

#10 02-09-12 14:12:07

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
Windows 7Chrome 21.0.1180.83

Re: Как удалить старые файлы?

petrun пишет:

Как тут время создания файла задается? Приведи пример как задать дату "старше чем пол года".

Вроде никак. Тогда фильтровать файлы надо не самим find'ом, а вручную через if.

Luca пишет:

. все использованные утилиты сугубо под nix

да ты что?

https://www.mingw.org/

Luca пишет:

Я не понимаю что происходит. Я запускаю скрипт на PowerShell, который вроде бы должен читать все файлы в массив и далее foreach'ем пробегать по ним и удалять все, дата которых значится как "более полугода назад".

А надо, чтобы сразу на лету, как только нашелся файл его проверять и если что - удалять. Без промежуточного массива.

Luca пишет:

Однако скрипт начинает очень долго думать. Уходят долгие часы. В прошлый раз прошло около 6 часов после чего я получил ошибку доступа -- видимо была короткая потеря связи и все оборвалось.

А так на лету можно будет добавить try-catch и при чтении перейдет к следующему файлу.

petrun пишет:

Все 10 миллионов? Это, я бы сказал, не слишком разумная идея.

Наконец-то умная мысль.

petrun пишет:

Найдите каталоги, и пробегаетесь по ним тем же повершеллом. ка я и предлагал.

А теперь нет, дурацкая мысль.

petrun пишет:

find / -type d > list

И что? Это равносильно Get-ChildItem ./ -Recurse -Attributes Directory> list.txt, только зачем?

petrun пишет:

cat list

Еще большиц пиздец, зачем?

Надо придумать, как сделать все это без промежуточного массива, в который пихать миллионы имен файлов. А для этого надо чтобы как только считался файл, сразу с ним поработать.

Неактивен

#11 02-09-12 17:43:00

terminaLtor
Powered by GNU/Linux
Из Интернета
Зарегистрирован: 05-07-10
Сообщений: 1,376
UbuntuChrome 18.0.1025.168

Re: Как удалить старые файлы?

Luca пишет:

Как тут время создания файла задается? Приведи пример как задать дату "старше чем пол года".

find /dir -mtime +185 -print

185 - кол-во дней

Неактивен

#12 02-09-12 18:11:49

Luca
Участник
Зарегистрирован: 03-09-09
Сообщений: 1,413
Windows 7Firefox 15.0

Re: Как удалить старые файлы?

petrun пишет:

А надо, чтобы сразу на лету, как только нашелся файл его проверять и если что - удалять. Без промежуточного массива.

Предложи вариант в коде...

Про mingw.org знаю, только не уверен в стабильности неродного решения.

Неактивен

#13 02-09-12 20:11:05

Babusha
Нехристь
Зарегистрирован: 12-03-10
Сообщений: 2,160
MacintoshSafari 5.0

Re: Как удалить старые файлы?

Я еще со вчера думаю над этим.

Да стабильно файнд работает на винде. Если он сначала делает список всех файлов, оно тебе не поможет.

Неактивен

Kwork.ru - услуги фрилансеров от 500 руб.
Мой VPS с 2016 года !
✅ Виртуальные от 300 ₽/месяц, RAM 1-10GB, DISK 20-360 GB;
✅ Выделенные от 3000 ₽/месяц. RAM 4-64GB, DISK до 4TB;
✅ Intel Xeon, SSD, XEN, iLO/KVM, Windows/Linux, Администрирование;
✅ Бесплатно Full Backup и Anti-DDoS.





Подвал форума

Под управлением FluxBB
Модифицировал Visman

Яндекс.Метрика