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


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

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

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

Оффлайн mstdmstd

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

 Спасибо!

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Cебе для этого написал такой скрипт:
Fdups.pl
Код: (perl) [Выделить]
#!/usr/bin/perl

use strict;
use File::Find;
use Digest::file qw(digest_file_hex);

use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

my $kb = 1024;
my $mb = 1048576;
my $gb = 1073741824;

my $dir = '.';

-d $dir or die "Ошибка: Директория \"$dir\" не найдена.";

my (%sf, %s);

sub bytes_scale {
my $b = $_[0] + 0;
my ($r, $n);
if    ($b >= $gb) { $r = $b / $gb; $n = 'G' }
elsif ($b >= $mb) { $r = $b / $mb; $n = 'M' }
elsif ($b >= $kb) { $r = $b / $kb; $n = 'K' }
else              { $r = $b;       $n = 'B' }
sprintf '%.3g%s', $r, $n;
}

sub a {
$sf{$_[1]}{$_[0]} = '';
$s{$_[1]}++;
}

sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);

    (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
    -f _ && (int(((-s _) + 511) / 512) > 0)
    && \&a ($name, -s _);
}

print "Поиск и чтение размеров файлов...\n";
File::Find::find({wanted => \&wanted}, $dir);

my (%hf, %h);

print "Вычисление хэш сумм для файлов с одинаковым размером и обработка данных...\n";
for my $size (keys %s) {
next unless ($s{$size} > 1);
for my $file (keys %{$sf{$size}}) {
my $hash = digest_file_hex($file, 'MD5');
$hf{$size}{$hash}{$file} = '';
$h{$size}{$hash}++;
}
}

my ($dups_exst, $grp, $f_cnt, $all_f_cnt, $all_summ_size);

print "Вывод данных...\n";

for my $size (keys %h) {

for my $hash (keys %{$hf{$size}}) {
next unless ($h{$size}{$hash} > 1);
$dups_exst = 1;
$grp++;
$f_cnt = 0;
print "Группа: $grp\n";

for my $file (keys %{$hf{$size}{$hash}}) {
$f_cnt++;
print "   $f_cnt) $file\n";
}

$f_cnt -= 1;
my $grp_size = $size * $f_cnt;
$all_f_cnt += $f_cnt;
$all_summ_size += $grp_size;
print "     ", &bytes_scale($size), " x $f_cnt = ", &bytes_scale($grp_size), "\n\n";
}
}

print "Дубликатов не найдено.\n" and exit unless ($dups_exst);

print "=====================================
Всего:
   Групп дубликатов: $grp
   Дубликатов в группах
   (не считая первого оригинального файла в каждой группе):
   $all_f_cnt файлов, объемом ", &bytes_scale($all_summ_size), ".\n=====================================\n";


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

Оффлайн Xless

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

Оффлайн Haron Prime

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 11313
  • Нетолерантный социопат
    • Просмотр профиля

Оффлайн mstdmstd

  • Автор темы
  • Активист
  • *
  • Сообщений: 322
    • Просмотр профиля
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

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

Оффлайн mstdmstd

  • Автор темы
  • Активист
  • *
  • Сообщений: 322
    • Просмотр профиля
На 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

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

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

 

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