Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Ищу утилиту для поиска одинаковых файлов  (Прочитано 924 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mstdmstd

  • Автор темы
  • Активист
  • *
  • Сообщений: 306
    • Просмотр профиля
Всем привет,
Нет ли под Kubuntu 16.04 удобной утилиты для поиска одинаковых файлов в проекте(каталог с подкаталогами)?

 Спасибо!

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Cебе для этого написал такой скрипт:
Fdups.pl
Код: Perl
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use File::Find;
  5. use Digest::file qw(digest_file_hex);
  6.  
  7. use vars qw/*name *dir *prune/;
  8. *name   = *File::Find::name;
  9. *dir    = *File::Find::dir;
  10. *prune  = *File::Find::prune;
  11.  
  12. my $kb = 1024;
  13. my $mb = 1048576;
  14. my $gb = 1073741824;
  15.  
  16. my $dir = '.';
  17.  
  18. -d $dir or die "Ошибка: Директория \"$dir\" не найдена.";
  19.  
  20. my (%sf, %s);
  21.  
  22. sub bytes_scale {
  23. my $b = $_[0] + 0;
  24. my ($r, $n);
  25. if    ($b >= $gb) { $r = $b / $gb; $n = 'G' }
  26. elsif ($b >= $mb) { $r = $b / $mb; $n = 'M' }
  27. elsif ($b >= $kb) { $r = $b / $kb; $n = 'K' }
  28. else              { $r = $b;       $n = 'B' }
  29. sprintf '%.3g%s', $r, $n;
  30. }
  31.  
  32. sub a {
  33. $sf{$_[1]}{$_[0]} = '';
  34. $s{$_[1]}++;
  35. }
  36.  
  37. sub wanted {
  38.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  39.  
  40.     (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
  41.     -f _ && (int(((-s _) + 511) / 512) > 0)
  42.     && \&a ($name, -s _);
  43. }
  44.  
  45. print "Поиск и чтение размеров файлов...\n";
  46. File::Find::find({wanted => \&wanted}, $dir);
  47.  
  48. my (%hf, %h);
  49.  
  50. print "Вычисление хэш сумм для файлов с одинаковым размером и обработка данных...\n";
  51. for my $size (keys %s) {
  52.         next unless ($s{$size} > 1);
  53.         for my $file (keys %{$sf{$size}}) {
  54.                 my $hash = digest_file_hex($file, 'MD5');
  55.                 $hf{$size}{$hash}{$file} = '';
  56.                 $h{$size}{$hash}++;
  57.         }
  58. }
  59.  
  60. my ($dups_exst, $grp, $f_cnt, $all_f_cnt, $all_summ_size);
  61.  
  62. print "Вывод данных...\n";
  63.  
  64. for my $size (keys %h) {
  65.  
  66.         for my $hash (keys %{$hf{$size}}) {
  67.                 next unless ($h{$size}{$hash} > 1);
  68.                 $dups_exst = 1;
  69.                 $grp++;
  70.                 $f_cnt = 0;
  71.                 print "Группа: $grp\n";
  72.  
  73.                 for my $file (keys %{$hf{$size}{$hash}}) {
  74.                         $f_cnt++;
  75.                         print "   $f_cnt) $file\n";
  76.                 }
  77.  
  78.                 $f_cnt -= 1;
  79.                 my $grp_size = $size * $f_cnt;
  80.                 $all_f_cnt += $f_cnt;
  81.                 $all_summ_size += $grp_size;
  82.                 print "     ", &bytes_scale($size), " x $f_cnt = ", &bytes_scale($grp_size), "\n\n";
  83.         }
  84. }
  85.  
  86. print "Дубликатов не найдено.\n" and exit unless ($dups_exst);
  87.  
  88. print "=====================================
  89. Всего:
  90.   Групп дубликатов: $grp
  91.   Дубликатов в группах
  92.   (не считая первого оригинального файла в каждой группе):
  93.   $all_f_cnt файлов, объемом ", &bytes_scale($all_summ_size), ".\n=====================================\n";
  94.  
  95.  

положил его в ~/bin (создать если нет), сделал
chmod +x ~/bin/Fdups.plи потом для поиска дубликатов находясь в нужной папке, вызываю:
Fdups.pl

Оффлайн Xless

  • Участник
  • *
  • Сообщений: 140
    • Просмотр профиля
посмотри FSlint.

Оффлайн Haron Prime

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 11313
  • Arch Linux & XMonad
    • Просмотр профиля
sudo ls -a | grep brain > /dev/head

Оффлайн mstdmstd

  • Автор темы
  • Активист
  • *
  • Сообщений: 306
    • Просмотр профиля
Dupeguru
Я выполнил
sudo apt-add-repository ppa:hsoft/ppaА какой пакет ставить ?
Из этого списка
  • dupeguru-se
    dupeguru-me
    dupeguru-pe
    moneyguru
    pdfmasher
инсталлятор ничего не нашел

toZen

  • Гость
mstdmstd,
sudo apt update ; sudo apt install dupeguru• dupeguru-me - music edition, для поиска только музыкальных файлов
• dupeguru-pe - picture edition, для поиска только изображений

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Раньше пробовал и FSlint, и прочие программы для поиска дубликатов,
но в них мне всегда нехватало:
Подсчета общего числа групп дубликатов,
Подсчета общего размера всех дубликатов,
Вывода объемов в K, M, G байтах,
и прочие мелочи-хотелки, но потом взялся и написал свой скрипт в котором все это есть и отлично работает. По эффективности и скорости он кстати не уступает, а может даже и превосходит FSlint и прочих.

Оффлайн mstdmstd

  • Автор темы
  • Активист
  • *
  • Сообщений: 306
    • Просмотр профиля
На perl-е увы никогда не писал :-\
FSlint хорош - но чего в нем не хватает - так это скопировать в буфер группу выделенных файлов ...
Или можно?

у меня php/js/css/scss ...приложение dupeguru видимо не подходит...

ТС, как видно по состоянию на 30/01/2020 потерял интерес к созданной им теме (пометка Решено в теме отсутствует, тема оставлена не закрытой, сообщений в теме давно не было). Тема стародавняя (последнее сообщение в топике: 13/05/2017; последнее сообщение от ТС в топике: 13/05/2017). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 30 Январь 2020, 19:00:26 от zg_nico »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
На perl-е увы никогда не писал :-\
Что писать-то собрался? Все уже написано и работает, или думаешь я тут вирус-троян выложил? :2funny:

Или можно?
Ага, можно. Кнопку "Выделить" нажми.

 

Страница сгенерирована за 0.44 секунд. Запросов: 22.