Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] необычный поиск дубликатов

Ответить
Настройки темы
Любой язык - [решено] необычный поиск дубликатов

Ветеран


Сообщения: 558
Благодарности: 5

Профиль | Отправить PM | Цитировать


здравствуйте, реально ли осуществить вот такую задачку..

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

mydomain.com_хорошее кино.avi
mydomain.com_хорошая комедия.wmv
mydomain.com_камедиклаб.avi
mydomain.com_сигареты камел.avi
mydomain.com_стивен сигал.wmv

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

указываю количество символов 5 и более, указываю в списке игноров всего одно слово "mydomain.com_".
такие должны быть результаты:

хорошее кино.avi
хорошая комедия.wmv

если задал 4 и более, а слово игнор "mydomain.com_", результаты в виде группы

хорошее кино.avi
хорошая комедия.wmv
----------------------------------------------------
сигареты камел.avi
стивен сигал.wmv

если задал 3 и более, а слово игнор "mydomain.com_":

хорошее кино.avi
хорошая комедия.wmv
----------------------------------------------------
сигареты камел.avi
стивен сигал.wmv
-----------------------------------------------------
хорошая комедия.wmv
камедиклаб.avi
----------------------------------------------------
камедиклаб.avi
сигареты камел.avi

Если можно сделать проще посредством каких - то программ, подскажите, пожалуйста каких именно, в тотале коммандере, есть поиск посредством плагина, может существует такой плагин

Отправлено: 16:05, 28-03-2015

 

Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


PowerShell: Если такой вариант сортировки подойдет, то можно прицепить обработку файлов
Код: Выделить весь код
$strings = 'хорошее кино',
           'хорошая комедия',
           'камедиклаб',
           'сигареты камел',
           'стивен сигал',
           'хорек и камел'

3,4,5 | foreach {

    $patterns = foreach ($s in $strings) {

        for ($i = 0; $i -le ($s.length - $_); $i++) {

            $s.substring($i,$_)
        
    }}

    "$($_):"
    
    foreach ($p in ($patterns | sort -unique)) {

        $res = $strings | where { $_ -match ".*${p}.*" } | foreach { $_ -replace $p,"[${p}]" }
        if ($res.count -ge 2) { $res; '' }
        
}}
Я для наглядности поместил сходства в квадратные скобки. Результат выводится группами по совпадениям (3,4 и 5 букв)
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:26, 28-03-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Foreigner, ноги у темы здесь растут: Прочие - не стандартный поиск дубликатов файлов.

Отправлено: 20:38, 28-03-2015 | #3


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Iska, там вроде не связано со скриптами. Ну ладно, что человек не делает, все делает для себя. Потренировался. Я кроме этого раздела никуда больше даже не заглядываю
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:53, 28-03-2015 | #4


Ветеран


Сообщения: 558
Благодарности: 5

Профиль | Отправить PM | Цитировать


Foreigner, спасибо, хочу протестировать, а у меня экран сразу изчезает.. т.е. нажимаю на файле правой кнопкой, "выполнить power shell", потом на синем фоне все быстро пробегает и окно закрывается
и еще вопросик, а можно прописать слова для игнора и чтобы расширение игнорировало? дело в том, что на многих файлах стоит как префикс название одного и того же домена, но эти файлы не являются дубликатами

Последний раз редактировалось Alexander_88, 28-03-2015 в 21:46.


Отправлено: 21:30, 28-03-2015 | #5


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Цитата Alexander_88:
хочу протестировать, а у меня экран сразу изчезае »
Добавьте в конец:
Код: Выделить весь код
...
}}
[console]::readkey($true)
или запишите результат в файл, исправьте последнюю строку:
Код: Выделить весь код
...
}} | set-content 1.txt
Цитата Alexander_88:
а можно прописать слова для игнора »
Можно, но надо все делать в комплексе, в скрипте просто пример поиска строк в которых есть соответствия из 3-х, 4-х или 5-буквенных подстрок. Завтра, если не буду занят, адаптирую под ваши условия.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:18, 29-03-2015 | #6


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Код: Выделить весь код
$notparse = 'mydomain.com_|mydomain.org_|www.ya.ru_'                          # не учитывается при поиске
$search_len = 4                                                               # длина подстроки
$files = get-childitem "D:\Test" -recurse | where { -not $_.psiscontainer }   # D:\Test -- путь к папке

$patterns = foreach ($f in $files) {
    
    $f = $f.basename -replace $notparse
    for ($i = 0; $i -le ($f.length - $search_len); $i++) {

        $f.substring($i,$search_len)
        
}}

return & {

foreach ($p in ($patterns | sort -unique)) {

    $res = $files | where { ($_.basename -replace $notparse) -match ".*${p}.*" } | foreach { "[${p}]: " + "$_" }
    if ($res.count -ge 2) { $res; '' }
        
}} | set-content "D:\Test\result.txt"
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:27, 29-03-2015 | #7


Ветеран


Сообщения: 558
Благодарности: 5

Профиль | Отправить PM | Цитировать


Foreigner, спасибо огромное.. оказывается я плохо пример сверху привел, там на самом деле гораздо больше совпадений))

только у меня вопросик:

1 - если у меня окно не изчезает и куча красного понаписано, мерцает, потом раз.. и останавливается (но окно не закрывается), я закрыл сам, открыл результаты, там уже записалось что-то, может нужно все же дождаться завершения, пока само закроется? (я прикрепил скрин)

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

пример:

я указал в игнор
rufig_
tort_
символов сделал 7

одно из совпадений

[0OPUD-1]: 00030rufig_OPUD-179_site.com.wmv
[0OPUD-1]: 00010tort_OPUD-181_site.com.wmv


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

символы 6

[[FHD]C]: 00001tort_DCN-047_site.com.wmv
[[FHD]C]: DCN-043.avi

в принципи все правильно, 6 символов есть, но почему в замене такое написано? я попробовал переместить в другую папку отдельно эти два файла, тогда получилось все нормально [DCN-04].......... может ли скрипт записать в квадратные скобки что - то из соседних файлов? (просто есть файл [FHD]CORE-026.mkv)

Последний раз редактировалось Alexander_88, 16-10-2015 в 09:28.


Отправлено: 09:09, 29-03-2015 | #8


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Цитата Alexander_88:
[0OPUD-1]: 00030rufig_OPUD-179_site.com.wmv
[0OPUD-1]: 00010tort_OPUD-181_site.com.wmv »
Ну правильно, в данном случае при разборе tort_ и rufig_ не учитываются.
Цитата Alexander_88:
[FHD]CORE-026.mkv »
Это конечно плохо, дело в том, что для поиска используется регулярное выражение, а "[]" служат спецсимволами для регекспов, заранее я всего предусмотреть не могу...
Пока попробуйте так:
Код: Выделить весь код
$notparse = 'mydomain.com_|mydomain.org_|www.ya.ru_|\[игнор\]' # Если присутствуют'[' и ']', то их надо экранировать '\[' и '\]' 
$search_len = 7
$files = get-childitem .\test -recurse | where { -not $_.psiscontainer }

$patterns = foreach ($f in $files) {
    
    $f = $f.basename -replace $notparse
    for ($i = 0; $i -le ($f.length - $search_len); $i++) {

        $f.substring($i,$search_len) -replace '(\[|\])','\$1'
        
}}

return & {

foreach ($p in ($patterns | sort -unique)) {

    $res = $files | where { ($_.basename -replace $notparse) -match ".*${p}.*" } | foreach { "[${p}]: " + "$_" }
    if ($res.count -ge 2) { $res -replace '\\'; '' }
        
}} | sc 1.txt
Если игнорируемая последовательность внутри строки (00030rufig_OPUD-179_site.com.wmv), то даже не знаю
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:36, 29-03-2015 | #9


Ветеран


Сообщения: 558
Благодарности: 5

Профиль | Отправить PM | Цитировать


сейчас нету fhd...., спасибо
Цитата Foreigner:
Если игнорируемая последовательность внутри строки (00030rufig_OPUD-179_site.com.wmv), то даже не знаю »
а нельзя сделать игнор, если встречается 5 цифр подряд? просто есть много файлов, которые начинаются всегда на пять цифр, но эти цифры не нужно сравнивать (пример имени файла выше)
или можно прописать в игнор случайные символы?, к примеру *rufig_, где * это случайные цифры перед словом.., я даже могу их кол-во задать, их будет 5, например #####rufig_

Отправлено: 13:34, 29-03-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] необычный поиск дубликатов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - не стандартный поиск дубликатов файлов Alexander_88 Программное обеспечение Windows 7 28-03-2015 15:45
CMD/BAT - Удаление дубликатов. evgon Скриптовые языки администрирования Windows 11 18-09-2014 21:10
Поймал необычный вирус microon Лечение систем от вредоносных программ 14 20-12-2012 13:06
Любой язык - [решено] Поиск дубликатов Baranius Скриптовые языки администрирования Windows 14 07-06-2012 12:22
Hare (необычный твикер) Ser6720 Программное обеспечение Windows 7 15-04-2006 01:38




 
Переход