View previous topic :: View next topic |
Author |
Message |
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 30, 2009 06:51 Post subject: [script request] Преобразуем дубликаты в ссылки NTFS |
|
|
В настоящий момент для TC уже есть автоматизатор сжатия фавйлов средствами NTFS, но эта файловая система даёт нам больше возможностей для экономии места. Удаление дубликатов не всегда приемлемо и здесь нас могут вырчуить жёсткие (а на ОС Windows Vista и выше - также символические) ссылки. Дело в том, что ссылка на файл не обязана иметь тоже имя, что и оригинал. Теперь вспомним о том, что при удалении одной ссылки другие копии остаются нетронутыми. так что работа с ними вполне безопасна.
Идея следующая:
- средствами тотала находим на диске дубликаты
- файлы на панель, выделяем нужные файлы
- запускаем (например, кнопкой) скрипт.
Алгоритм скрипта:
- считает контрольные суммы выделенных файлов
или берёт из колонки (как это может делать DupSelector)
- если у файла есть дубликат с аналогичной контрольной суммой, то
а) проверяет, является ли он жёсткой ссылкой. Если да, идём к следующему дубликату.
б) если файл не является жёсткой ссылкой, один из файлов удаляется и на его местке появляется жёсткая ссылка с именем удалённого файла.
Таким образов, вместо удаления дубликатов мы конвертируем их в жёсткие ссылки, тем самым экономим место на диске.
Естественно, это будет работать в пределах одного диска,
но для висты и выше можно предусмотреть конвертирование дубликата в символическую ссылку (там есть свои ньюансы, по-этому реализация этого функционала фторостепенна).
Вопрос гуру скриптинга, насколько реально реализовать такое средствами VBScript/PowerPro?
Приветствуются любые идеи идеи по автоматизации процесса, в т.ч. средствами внешних утилит или написание спец. плагина. В общем, не обязательно ограничиваться скриптами. |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Tue Jun 30, 2009 12:33 Post subject: |
|
|
DrShark wrote: | так что работа с ними вполне безопасна. |
Тут есть тонкий момент: главное потом при работе с файлом не забыть, что это не копия, а ссылка. А то так начнёшь править файл, забыв, что вместе с файлом одновременно правится и забэкапленная копия…
А вообще что-то мне такое попадалось уже на просторах Интернета, хотя в упор не помню, где и что это было. Кажется, какая-то из прожек удаления дубликатов таким функционалом обладала. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 30, 2009 14:32 Post subject: |
|
|
CaptainFlint wrote: | DrShark wrote: | так что работа с ними вполне безопасна. | Тут есть тонкий момент: главное потом при работе с файлом не забыть, что это не копия, а ссылка. А то так начнёшь править файл, забыв, что вместе с файлом одновременно правится и забэкапленная копия… | Да, согласен, по-этому создание таких ссылок-клонов применимо скорее для нередактируемых форматов типа *.exe. Ну и ещё надо быть внимательным с файлами, которые содержат потоки NTFS (помимо стандартных) - думаю, их по умолчанию не стоит рассматривать как копии и удалять только после предупреждения... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 30, 2009 15:16 Post subject: |
|
|
DrShark wrote: | проверяет, является ли он жёсткой ссылкой. |
CaptainFlint
Насколько я помню, ты говорил, что такая фраза не совсем корректна? С равной долей правомочности можно сказать, что и первоначальный файл является жесткой ссылкой? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 30, 2009 17:16 Post subject: |
|
|
Batya wrote: | DrShark wrote: | проверяет, является ли он жёсткой ссылкой. |
CaptainFlint
Насколько я помню, ты говорил, что такая фраза не совсем корректна? С равной долей правомочности можно сказать, что и первоначальный файл является жесткой ссылкой? | Да, т.е. если для файла создать жёсткую ссылку, то ссылками станут оба файла. Т.е. для жёстких ссылок нет понятий "родитель"-"преемник", в отличии от junctions или symlinks. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 30, 2009 18:43 Post subject: |
|
|
DrShark wrote: | проверяет, является ли он жёсткой ссылкой. |
Соответственно, данный пункт надо переиначить - "проверяет, что количество жёстких ссылок больше 1".
А вот теперь, может кто-нибудь даст мысль, как это сделать на vbs? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 30, 2009 19:52 Post subject: |
|
|
Batya wrote: | DrShark wrote: | проверяет, является ли он жёсткой ссылкой. |
Соответственно, данный пункт надо переиначить - "проверяет, что количество жёстких ссылок больше 1". | Да, если ссылка 1, то можно считать, что их нет , а если минимум 2, то есть (кстати, плагин NL_Info считает их по такому же принципу).
Quote: | А вот теперь, может кто-нибудь даст мысль, как это сделать на vbs? | Можно воспользоваться утилитой ln c ключём -l.
Тут есть ещё пример для работы с ссылками и потоками на vbs. |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Tue Jun 30, 2009 21:05 Post subject: |
|
|
Batya wrote: | Соответственно, данный пункт надо переиначить - "проверяет, что количество жёстких ссылок больше 1". |
Не совсем так. Может получиться, что на диске есть два файла-дубликата, каждый из которых имеет более одной ссылки в файловой системе. Тогда такой подход их проигнорирует, хотя один из файлов можно было бы удалить, заменив все его ссылки ссылками на другой файл. На самом деле, более правильно было бы сравнивать не количество жёстких ссылок, а идентификаторы записей файловой системы (иноды, если использовать никсовую терминологию, не знаю, как оно в виндах официально называется). _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 30, 2009 21:26 Post subject: |
|
|
CaptainFlint wrote: | На самом деле, более правильно было бы сравнивать не количество жёстких ссылок, а идентификаторы записей файловой системы (иноды, если использовать никсовую терминологию, не знаю, как оно в виндах официально называется). | С использованием утилиты ln в идентификаторах нет необходимости - вышеуказанный ключ -l на WinXP выводит полные пути к файлам-ссылкам. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 30, 2009 22:49 Post subject: |
|
|
CaptainFlint wrote: | Не совсем так. |
Вообщем, да.
Нужно из группы дубликатов выделить один из файлов с максимальным количеством жестких ссылок. Сразу убрать из рассмотрения файлы, которые являются ссылками того же файла. Далее обработать остальные файлы, удалив дубликаты и заменив их жесткими ссылками на выбранный файл. Это всё технические детали.
Основная проблема - как мне загнать в скрипте вычисление количества жестких ссылок в переменную? А также - результат сравнения, являются ли файлы жесткими ссылками одного и того же файла? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Tue Jun 30, 2009 23:49 Post subject: |
|
|
CaptainFlint wrote: | Может получиться, что на диске есть два файла-дубликата, каждый из которых имеет более одной ссылки в файловой системе. Тогда такой подход их проигнорирует, хотя один из файлов можно было бы удалить, заменив все его ссылки ссылками на другой файл. | Кстати, это довольно сильно усложняет задачу. Тогда надо парсить список ссылок для каждого файла-ссылки и много сравнивать... Может, для начала всё же оставить уже существующие файлы-ссылки (2 и более экземпляров) в покое, и если найдётся приемлемое решение, добавить их удаление в качестве опции...
Batya wrote: | А также - результат сравнения, являются ли файлы жесткими ссылками одного и того же файла?
| ИМХО, парсить вывод ln -l для каждого файла-ссылки и искать различия. В общем, непростая ситуация... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Wed Jul 01, 2009 11:39 Post subject: |
|
|
В настоящий момент могу создать скрипт тупо пересоздающий жесткие ссылки при каждом его запуске. При этом могу сохранять имена, даты и атрибуты исходных файлов. Потоки NTFS - не ко мне. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Fri Jul 03, 2009 14:48 Post subject: |
|
|
Batya wrote: | В настоящий момент могу создать скрипт тупо пересоздающий жесткие ссылки при каждом его запуске. При этом могу сохранять имена, даты и атрибуты исходных файлов. Потоки NTFS - не ко мне. | А идентичность файлов как определяться будет? Сам плагин по контрольным суммам, которые будет считать скрипт, или по колонке плагина в Тотале? Если возможно, второй вариант предпочтительнее (можно оба на выбор)... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Fri Jul 03, 2009 18:23 Post subject: |
|
|
DrShark
Контрольную сумму (md5) будет считать скрипт. Это не проблема. Проблема - уже для выявленных дубликатов проверять, является ли файл жёсткой ссылкой (есть ли у реальной области на диске, соответствующей файлу, более одной ссылки на неё). Проще удалять (не глядя, файл это или жёсткая ссылка) и создавать новую жёсткую ссылку. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
DrShark
Joined: 21 Oct 2006 Posts: 911 Location: Kyiv, Ukraine
|
(Separately) Posted: Fri Jul 03, 2009 21:11 Post subject: |
|
|
Batya wrote: | Проблема - уже для выявленных дубликатов проверять, является ли файл жёсткой ссылкой (есть ли у реальной области на диске, соответствующей файлу, более одной ссылки на неё). | А утилита ln, которую я предлагал, для этой задачи разве не подходит? |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|