поиск и сравнение файлов в директориях (утилита, скрипт...)

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Аватара пользователя
G@riK
Сообщения: 54

поиск и сравнение файлов в директориях

Сообщение G@riK »

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

есть ли какие либо скрипты для этого, или как такое написать самому и на чём?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

Сравнительно недавно попалось под руку.
KDiff3 - tool for comparison and merge of files and directories. Для КДЕ. Может чем поможет.
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

у меня нет иксов, тока консолька... а чего нить подобного под консоль не видел?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: поиск и сравнение файлов в директориях

Сообщение flook »

diff
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: поиск и сравнение файлов в директориях

Сообщение allez »

Можно, например, так:

Код: Выделить всё

!/bin/bash

find -type f | egrep -i "\.avi|\.mpg" | xargs ls -l | awk '{print $5" "$8}' | sort -n > /tmp/list

declare -i LINES=`cat /tmp/list | wc -l`
declare -i I=2
LINE=`head -n 1 /tmp/list`

while [ $I -le $LINES ];
do
  NEXTLINE=`head -n $I /tmp/list | tail -n 1`
  SIZE=`echo $LINE | awk '{print $1}'`
  NEXTSIZE=`echo $NEXTLINE | awk '{print $1}'`

  if [ "$SIZE" == "$NEXTSIZE" ];
  then
    FILE=`echo $LINE | awk '{print $2}' | awk -F/ '{print $NF}'`
    NEXTFILE=`echo $NEXTLINE | awk '{print $2}' | awk -F/ '{print $NF}'`

    if [ "$FILE" == "$NEXTFILE" ];
    then
      echo $LINE >> /tmp/draft
      echo $NEXTLINE >> /tmp/draft
    fi

  else
    LINE=$NEXTLINE
  fi
  ((I++))
done

cat /tmp/draft | sort -u > /tmp/out.txt
rm -f /tmp/list /tmp/draft

В итоге в файле /tmp/out.txt должен будет находиться список файлов с одинаковыми размерами и именами.
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: поиск и сравнение файлов в директориях

Сообщение flook »

Зачем так сложно?

find dir1 > d1
find dir2 > d2
diff d1 d2

Все с нужными ключами...
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

2 Allez
он сканит только 1 директорию?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: поиск и сравнение файлов в директориях

Сообщение allez »

Зачем так сложно?

find dir1 > d1
find dir2 > d2
diff d1 d2

Все с нужными ключами...

А если каталогов больше двух (а если верить автору темы, дело обстоит именно так)? Не забывайте также, что нужно сравнивать файлы еще и по размеру. Хотя, впрочем, эта часть задачи решается использованием awk.

G@riK
Вы можете указать несколько каталогов в качестве аргумента команды find.

Код: Выделить всё

find dir1 dir2 ... dirX -type f | egrep -i "\.avi|\.mpg" | xargs ls -l | awk '{print $5" "$8}' | sort -n > /tmp/list
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

2 allez

вот что в файле out.txt:

3584 2005
648620032 2000
693512192 2000
706834432 2001
707362816 2003
709754880 2002
718583808 2002
718911488 2003
720467968 2002
722184192 2003
723673088 2002
724838400 2002
737886208 2004

первое это наверно размер, а 2 это что?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
tux
Сообщения: 36

Re: поиск и сравнение файлов в директориях

Сообщение tux »

G@riK писал(а):
15.03.2006 14:12
2 allez

вот что в файле out.txt:

3584 2005
648620032 2000
693512192 2000
706834432 2001
707362816 2003
709754880 2002
718583808 2002
718911488 2003
720467968 2002
722184192 2003
723673088 2002
724838400 2002
737886208 2004

первое это наверно размер, а 2 это что?

вторая чать похожа на год (2002, 2004, 2005, 2001, 2000)
Slackware 10.2
-------------------
KDE 3.4
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

да, я заметил, что год, но нужно не год, а имя файла, размер и путь к нему))
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
kapa
Сообщения: 143

Re: поиск и сравнение файлов в директориях

Сообщение kapa »

G@riK писал(а):
15.03.2006 15:17
да, я заметил, что год, но нужно не год, а имя файла, размер и путь к нему))

вот ты ленивый ;)
ну смени поля вывода на другие %)
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

вот пример результата работы скрипта :

648620032 Матрица.avi
648620032 /mnt/raid0/Films1/Матрица/Матрица.avi
693512192 Леон.avi
693512192 /mnt/raid0/Films1/Леон/Леон.avi
706834432 Скорость.AVI
706834432 /mnt/raid0/Films1/Скорость/Скорость.AVI
707362816 Прогулка.avi
707362816 /mnt/raid0/Films1/Прогулка/Прогулка.avi
709754880 Пришелец.avi
709754880 /mnt/raid0/Films1/Пришелец/Пришелец.avi
718583808 Антикиллер.avi
718583808 /mnt/raid0/Films1/Антикиллер/Антикиллер.avi
718911488 Укуренные.avi
718911488 /mnt/raid0/Films1/Укуренные/Укуренные.avi
720467968 Форсаж.avi
720467968 /mnt/raid0/Films1/Форсаж/Форсаж.avi
723673088 Блэйд.avi
723673088 /mnt/raid0/Films1/Блэйд/Блэйд.avi
737886208 Куб.Avi
737886208 /mnt/raid0/Films3/Куб/Куб.Avi
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Horrible
Сообщения: 256
Статус: Emacs geek
ОС: Emacs

Re: поиск и сравнение файлов в директориях

Сообщение Horrible »

блин че изобретать велосипед, тут уже грамотные люди говорили diff
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

сделал такой скрипт:

Код: Выделить всё

#!/bin/bash
DIR=/mnt/raid0/Films*

for i in /mnt/raid0/Films*
do
    ls -l $i/*
    done | awk '{print $5}' | sort -n | uniq -c | sort -n | grep -v '1 ' > ~/testsize.txt

for i in `cat ~/testsize.txt | awk '{print $2}'`
do
    LS=`find $DIR -size "$i"c | iconv -f koi8-r -t utf-8 | sed "s/\/mnt/$i ----> \/mnt/g"`
    for fl in "$LS"
    do
        echo "$fl"
        echo "============================================================================
===================================
==="
    done
done > ~/size.txt


это сравнение по размеру, при этом выдаётся ещё и путь к файлам...

организация файлового серва такова: есть папка Films, а в ней подпапки, названные также, как и сам фильм...
но не могу написать сравнение по имени файла, т.к. файлы с разными путями уже не уникальны и сравнение их ни к чему не приводит... может кто нить помочь?
да, и имена файлов содержат пробелы...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: поиск и сравнение файлов в директориях

Сообщение t.t »

Ребята, а поискать? Есть отличная утилита именно для этих задач, fdupes называется. Она не только ищет файлы с одинаковым размером, но и проверяет, что они действительно являются дублями.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: поиск и сравнение файлов в директориях

Сообщение JaGoTerr »

(G@riK @ Mar 17 2006, в 11:25) писал(а):не могу написать сравнение по имени файла, т.к. файлы с разными путями уже не уникальны и сравнение их ни к чему не приводит

man basename, i guess?
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

t.t писал(а):
19.03.2006 16:25
Ребята, а поискать? Есть отличная утилита именно для этих задач, fdupes называется. Она не только ищет файлы с одинаковым размером, но и проверяет, что они действительно являются дублями.

слишком ресурсоёмкая прога... и сканит оооочень долго
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

слишком ресурсоёмкая прога... и сканит оооочень долго

Это всё фигня. Так и должно быть. А как вы хотели, "и рыбку съесть, и на ... сесть"? Так не бывает. Попробуй-ка это всё сделать вручную.
А Тихону ОГРОМНОЕ СПАСИБО. Отличная прога. В своих 30-ти гигах аудио свалки около гига дублей выудил. Остался вопросик. Как эти дубли быстренько удалить, особо не заморачиваясь?
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

Alexxx писал(а):
20.03.2006 17:16
слишком ресурсоёмкая прога... и сканит оооочень долго

Это всё фигня. Так и должно быть. А как вы хотели, "и рыбку съесть, и на ... сесть"? Так не бывает. Попробуй-ка это всё сделать вручную.
А Тихону ОГРОМНОЕ СПАСИБО. Отличная прога. В своих 30-ти гигах аудио свалки около гига дублей выудил. Остался вопросик. Как эти дубли быстренько удалить, особо не заморачиваясь?

там ключик -d есть, почитай, что он делает... да, у меня объём сервака 2000 Гбайт и будет расширен ещё...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

Про ключик -d я понял, что он интерактивный, что меня собственно и не устраивает, об чём и спич. Читал этот ман, перечитал, так и не въехал, млин.
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

кста, а куда он выводит результаты сканирования?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

G@riK писал(а):
20.03.2006 18:25
кста, а куда он выводит результаты сканирования?

??? На стандартный вывод, то биш консоль. А где ты ещё видишь эти результыты? Можешь перенаправить куда нибудь в другое место.

P.S. Я себе уже сделал файлик со списком для удаления. Теперь задача: каждую строку заковычить и поставить впереди rm -f. А строчек там чуть больше двухсот.
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

Alexxx писал(а):
20.03.2006 18:55
G@riK писал(а):
20.03.2006 18:25

кста, а куда он выводит результаты сканирования?

??? На стандартный вывод, то биш консоль. А где ты ещё видишь эти результыты? Можешь перенаправить куда нибудь в другое место.

P.S. Я себе уже сделал файлик со списком для удаления. Теперь задача: каждую строку заковычить и поставить впереди rm -f. А строчек там чуть больше двухсот.

напиши небольшой парсер) а у меня нифига ничего не выводит, хотя я точно знаю. что есть одинаковые файлы...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

Я делал так:

Код: Выделить всё

fdupes -S -r /mnt/hda12/audio
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

Alexxx писал(а):
20.03.2006 19:11
Я делал так:

Код: Выделить всё

fdupes -S -r /mnt/hda12/audio

делал точно также)) ничего
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

Можно легко проверить. Создай любую директорию. Слей в неё какие нибудь файлы. В неё же создай ещё одну директорию с этими же файлами и проскань.
Спасибо сказали:
Аватара пользователя
G@riK
Сообщения: 54

Re: поиск и сравнение файлов в директориях

Сообщение G@riK »

нашёл ошибку...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: поиск и сравнение файлов в директориях

Сообщение t.t »

(Alexxx @ Mar 20 2006, в 16:16) писал(а):А Тихону ОГРОМНОЕ СПАСИБО. Отличная прога. В своих 30-ти гигах аудио свалки около гига дублей выудил. Остался вопросик. Как эти дубли быстренько удалить, особо не заморачиваясь?
fdupes -rf .|xargs rm -f
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: поиск и сравнение файлов в директориях

Сообщение Alexxx »

t.t писал(а):
03.04.2006 11:56
fdupes -rf .|xargs rm -f

Завтра на работе попробую. Дома я уже сделал. Сначала в файл. Файл обработал с помощью sed, преобразовал в скрипт и выполнил.
Спасибо сказали: