LinuxForum.Fans
Тема

Дубликаты

Автор: Anatoly2012 51 сообщений 9736 просмотров
#343381

С П А С И Б О Т Е Б Е О Г Р О М Н О Е, ДОБРЫЙ ЧЕЛОВЕК!!!
За 4-5 мин. удалил почти 1000 дубликатов, правда в теститруемой папке, где заранее знал где и в какой папке дубликаты лучше удалять. Но, это уже большой прогресс + нервы спокойны и здоровье на другие добрые дела еще пригодится.

"-=Serj=-" написал:
Запускать

$ ./dedup.py <target_dir>

Так не сработал почему-то, а в самой директории отлично справился!!! *THUMBSUP*
Еще бы немного усовершенствовать (по второму варианту) скрипт и цены бы ему не было. А, главное респект и уважение автору! *DRINK*

#343382
"-=Serj=-" написал:
думаю, вы запаритесь вводить 'y'

После почти недельной "запарке" - это как бальзам на душу!

#343384
"Anatoly2012" написал:
Так не сработал почему-то, а в самой директории отлично справился!!!

Путь полный указывали?

"Anatoly2012" написал:
Еще бы немного усовершенствовать (по второму варианту)

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

#343386
"-=Serj=-" написал:
Путь полный указывали?

Да, указывал.

"-=Serj=-" написал:
Возможно, удобнее будет, если сначала создать списки повторяющихся файлов

Т.е. по расширениям? Всего не предусмотришь, но основные можно... если правильно понял.

"-=Serj=-" написал:
Если необходимо, могу, по-возможности, допилить.

ОЧЕНЬ необходимо! думаю не мне только, особенно после сбоев накопителей и восстановления инфы, накопления и чистки излишней информации и т.п.

#343388
"Anatoly2012" написал:
Т.е. по расширениям?

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

#343409
"Anatoly2012" написал:
Основной критерий: содержание файла

можно проще сделать

text
$ find . -type f -exec md5sum {} \; | sort | uniq -w32 -d

эта команда показывает ТОЛЬКО те имена файлов, содержимое которых повторяется. Также она показывает их хеш.

#343410
"-=Serj=-" написал:
Не, программа сначала пробегается по каталогам и создаёт списки файлов, у которых совпадает md5
text
$ find . -type f -exec md5sum {} \; | sort | uniq -w32 -D

зачем нужен ваш питон?

#343440
"drBatty" написал:
зачем нужен ваш питон?

Пойду выкину его в помойку. Однако, до этого места

"-=Serj=-" написал:
Не, программа сначала пробегается по каталогам и создаёт списки файлов, у которых совпадает md5, после чего делай с файлами что угодно.

всё было не так очевидно.

Маленькое уточнение:

"Anatoly2012" написал:
исключить некоторые расширения, типа - .gif  .js .HLP .tif .TTF .css .ico .INF .ini .PFB
#343441
"-=Serj=-" написал:
Маленькое уточнение:

Ещё одно маленькое уточнение — find тоже может исключать из поиска по маске имени.

#343443
"Lupo Alberto" написал:
Ещё одно маленькое уточнение — find тоже может исключать из поиска по маске имени.

Да, выше уже приводилось:

"drBatty" написал:
find . ! -name "*.git" ! -name "*.js"
#343512
"drBatty" написал:
можно проще сделать

$ find . -type f -exec md5sum {} \; | sort | uniq -w32 -d

эта команда показывает ТОЛЬКО те имена файлов, содержимое которых повторяется. Также она показывает их хеш.

Да, но не исключает указанные выше расширения и не предоставляет выбора что и где удалить, а что оставить. В этом плане питон практичней.

"-=Serj=-" написал:
drBatty пишет:

зачем нужен ваш питон?

Пойду выкину его в помойку

Не надо выкидывать то, что реально помогает и нет пока лучшей альтернативы.

#343513
"Lupo Alberto" написал:
Ещё одно маленькое уточнение — find тоже может исключать из поиска по маске имени.

Подскажите, пожалуйста, как? *SCRATCH*

#343519
"Anatoly2012" написал:
Подскажите, пожалуйста, как? bw
"-=Serj=-" написал:
Да, выше уже приводилось:
drBatty пишет:
text
find . ! -name "*.git" ! -name "*.js"

#343520

Простите, а как правильно будет связать эти команды:
find . -type f -exec md5sum {} \; | sort | uniq -w32 -d
find . ! -name "*.git" ! -name "*.js"

#343523
"Anatoly2012" написал:
Простите, а как правильно будет связать эти команды:
find . -type f -exec md5sum {} \; | sort | uniq -w32 -d
find . ! -name "*.git" ! -name "*.js"
text
find . ! -name "*.git" ! -name "*.js" -type f -exec md5sum {} \; | sort | uniq -w32 -d

P.S. http://ru.clihelper.com/find/
P.S.S. man find

#343525

Lupo Alberto и drBatty, еще раз спасибо! *YES*

#343526
"Lupo Alberto" написал:
P.S. http://ru.clihelper.com/find/
P.S.S. man find

Это читал уже, но мне еще не хватает знания основ работы с командами в консоли, а главное времени. По-тихоньку может научимся...

#343692

-=Serj=-, а скрипт допилить никак не получится?

#343701

Anatoly2012, какие требования?

#343708
"-=Serj=-" написал:
исключить некоторые расширения, типа - .gif .js .HLP .tif .TTF .css .ico .INF .ini .PFB

намекаете на то, что питон умеет регулярки?

man find

-regex pattern
File name matches regular expression pattern. This is a match on the whole
path, not a search. For example, to match a file named `./fubar3', you can
use the regular expression `.*bar.' or `.*b.*3', but not `f.*r3'. The regu-
lar expressions understood by find are by default Emacs Regular Expressions,
but this can be changed with the -regextype option.
"Anatoly2012" написал:
Да, но не исключает указанные выше расширения и не предоставляет выбора что и где удалить, а что оставить. В этом плане питон практичней.

выбор нужен? И это есть у find

-ok command ;
Like -exec but ask the user first. If the user agrees, run the command.
Otherwise just return false. If the command is run, its standard input is
redirected from /dev/null.

The response to the prompt is matched against a pair of regular expressions
to determine if it is an affirmative or negative response. This regular
expression is obtained from the system if the `POSIXLY_CORRECT' environment
variable is set, or otherwise from find's message translations. If the sys-
tem has no suitable definition, find's own definition will be used. In
either case, the interpretation of the regular expression itself will be
affected by the environment variables 'LC_CTYPE' (character classes) and
'LC_COLLATE' (character ranges and equivalence classes).

и вообще, дрова лучше пилить бензопилой. Да, я знаю, ваш швейцарский нож тоже с пилой в комплекте. Но моя бензопила практичнее.

"Anatoly2012" написал:
Не надо выкидывать то, что реально помогает и нет пока лучшей альтернативы.
ой, а мужики-то не знали... А как вы думаете, что делали тогда, когда вашего питона не было?

"Anatoly2012" написал:
Простите, а как правильно будет связать эти команды:

по умолчанию find связывает по "И"

text
find УСЛОВИЕ1 AND УСЛОВИЕ2 AND УСЛОВИЕ3 AND ДЕЙСТВИЕ

ДЕЙСТВИЕ выполнится тогда, и только тогда, когда все условия истинны. Самое ДЕЙСТВИЕ -- тоже условие, ибо всякая команда выдаёт код возврата, и она истинна, если код равен 0.

Войдите или зарегистрируйтесь, чтобы ответить.