View previous topic :: View next topic |
Author |
Message |
Koros
Joined: 07 Oct 2006 Posts: 4
|
(Separately) Posted: Sat Oct 07, 2006 10:33 Post subject: Использование NTFS Links, для увеличения места на диске |
|
|
У меня такая ситуация, на NTFS диске в разных папках есть полностью одинаковые файлы, как можно максимально быстро оставить только по одной копии каждого файла, а для остальных создать NTFS ссылки.
P.S. файлов примерно 3000, вручную создавать ссылки слишком долго |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6193 Location: Москва
|
(Separately) Posted: Sat Oct 07, 2006 15:48 Post subject: |
|
|
Koros
NTFS links тут, скорее всего, будет бесполезен. Не для того он создавался...
Если винда XP, можно воспользоваться стандартной прожкой fsutil. Сначала сделать поиск всех дубликатов, забросить их имена с путями в BAT-файл и дописать в начале вызов этой программы. Каждая строка должна быть в формате:
Code: | fsutil hardlink create <имя создаваемой ссылки> <существующий файл> |
Потом удалить все существующие дубликаты, пути к которым указал в поле <имя создаваемой ссылки>, ну и запустить этот батничек.
PS: Тема больше относится к дополнительным внешним средствам, так что переношу в "Плагины Total Commander". _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
Koros
Joined: 07 Oct 2006 Posts: 4
|
(Separately) Posted: Sat Oct 07, 2006 20:43 Post subject: |
|
|
В данном случае программа, которой будут создаваться ссылки значения не имеет, проблема в том что среди дубликатов примерно 1200 различных файлов, т.е. каждый файл имеет 2-3 копии, причем имена дублирующихся файлов различны (одинаково только содержание, и размер естественно).
Предложенный вариант мне не подходит, потому что для этого в бат файле надо 1200 раз прописать соответствующий <существующий файл>, разный для каждых 2-3 строчек, вручную это делать долго.
Такой бат файл можно было бы без проблем сгенерировать с помощью любой простенькой программки, при условии что Total бы разделял группы дубликатов в списке при сохранении, иначе придется повторно сравнивать файлы из найденных дубликатов.
Вобщем проблема в следующем - как можно сохранить список, найденных дубликатов из тотала, разделив к.л. образом их на группы. Вариант с копированием экрана со списком с помощью snagit и т.п. не подходит. |
|
Back to top |
|
 |
funduk

Joined: 16 Aug 2005 Posts: 1513 Location: Санкт-Петербург
|
(Separately) Posted: Sat Oct 07, 2006 21:40 Post subject: |
|
|
Koros, тебе сюда. |
|
Back to top |
|
 |
Koros
Joined: 07 Oct 2006 Posts: 4
|
(Separately) Posted: Sat Oct 07, 2006 23:06 Post subject: |
|
|
Большое спасибо, подредактировал скрипт, все получилось. |
|
Back to top |
|
 |
Zoooom
Joined: 28 Dec 2004 Posts: 45
|
(Separately) Posted: Fri Oct 13, 2006 01:28 Post subject: |
|
|
а выложить сюда готовый скриптик что находит дубликаты и меняет их на линки?
так лениво делать во второй раз то что у других получилось |
|
Back to top |
|
 |
Koros
Joined: 07 Oct 2006 Posts: 4
|
(Separately) Posted: Fri Oct 13, 2006 16:23 Post subject: |
|
|
Вот скрипт который я использовал для создания bat файла и для выделения тех файлов, которые надо удалить.
Code: | '=====================[ Start of file ]=========================
' File: SelNotFirst.vbs
' Description: Удаляет все парные файлы кроме первого
' из списка, созданного поиском дубликатов в ТС
' Installation: Создайте кнопку на панели TC
' Команда: "диск:\путь\к\файлу\SelNotFirst.vbs"
' Параметры: "%L"
' Copyright: (c) 2006, Volniy
Option Explicit
Dim FSO, ListFile, SelFile,TCS, Selfile1, Selfile2, bat
Dim File1, File2, Cnt, Buf
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not ListFile.AtEndOfStream
SelFile = ListFile.ReadLine
File2 = FSO.GetFileName(SelFile)
If StrComp(File1, File2, 1) = 0 Then
Buf = Buf & SelFile & vbNewLine
Cnt = Cnt + 1
Selfile2 = Selfile
bat = bat & "fsutil.exe hardlink create " & chr(34) & Selfile2 & chr(34) & " " & chr(34) & Selfile1 & chr(34) & vbNewLine
Else
Selfile1 = Selfile
End If
File1 = File2
Loop
ListFile.Close
'TCS.ClearClip
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True
Set ListFile = FSO.CreateTextFile("C:\Temp\1.bat", 1)
ListFile.Write(bat)
ListFile.Close
Set ListFile = Nothing
Set FSO = Nothing
Set TCS = Nothing
MsgBox "Выделено дубликатов: " & Cnt, vbInformation, "Завершено!"
WScript.Quit
'=====================[ End of file ]========================= |
Пояснения:
Сначала надо запустить поиск дубликатов, затем вывести все файлы на панель, выделить их и запустить скрипт (его надо повешать на к.л. кнопку), он сформирует bat файл при запуске которого создадутся NTFS ссылки, и выделит все дубликаты кроме первого в каждом блоке, их надо удалить, потом запустить 1.bat файл из папки C:\temp, вот и все.
Единственная проблема при испльзовании этого скрипта - у одинаковых файлов должны быть одинаковые имена, а так бывает не всегда. |
|
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
|