поиск и сравнение файлов в директориях (утилита, скрипт...)
Модератор: /dev/random
-
G@riK
- Сообщения: 54
поиск и сравнение файлов в директориях
ситуация такова: есть несколько директорий с фильмами, нужно найти одинаковые файлы по имени файла и его размеру и вывести их с путями в отдельный файл.
есть ли какие либо скрипты для этого, или как такое написать самому и на чём?
есть ли какие либо скрипты для этого, или как такое написать самому и на чём?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current
Re: поиск и сравнение файлов в директориях
Сравнительно недавно попалось под руку.
KDiff3 - tool for comparison and merge of files and directories. Для КДЕ. Может чем поможет.
KDiff3 - tool for comparison and merge of files and directories. Для КДЕ. Может чем поможет.
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
у меня нет иксов, тока консолька... а чего нить подобного под консоль не видел?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: поиск и сравнение файлов в директориях
diff
В каждом из нас спит гений... и с каждым днем все крепче...
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: поиск и сравнение файлов в директориях
Можно, например, так:
В итоге в файле /tmp/out.txt должен будет находиться список файлов с одинаковыми размерами и именами.
Код: Выделить всё
!/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: поиск и сравнение файлов в директориях
Зачем так сложно?
find dir1 > d1
find dir2 > d2
diff d1 d2
Все с нужными ключами...
find dir1 > d1
find dir2 > d2
diff d1 d2
Все с нужными ключами...
В каждом из нас спит гений... и с каждым днем все крепче...
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
2 Allez
он сканит только 1 директорию?
он сканит только 1 директорию?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: поиск и сравнение файлов в директориях
Зачем так сложно?
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: поиск и сравнение файлов в директориях
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 это что?
вот что в файле 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: поиск и сравнение файлов в директориях
вторая чать похожа на год (2002, 2004, 2005, 2001, 2000)
Slackware 10.2
-------------------
KDE 3.4
-------------------
KDE 3.4
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
да, я заметил, что год, но нужно не год, а имя файла, размер и путь к нему))
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
kapa
- Сообщения: 143
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
вот пример результата работы скрипта :
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
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: поиск и сравнение файлов в директориях
блин че изобретать велосипед, тут уже грамотные люди говорили diff
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
сделал такой скрипт:
это сравнение по размеру, при этом выдаётся ещё и путь к файлам...
организация файлового серва такова: есть папка Films, а в ней подпапки, названные также, как и сам фильм...
но не могу написать сравнение по имени файла, т.к. файлы с разными путями уже не уникальны и сравнение их ни к чему не приводит... может кто нить помочь?
да, и имена файлов содержат пробелы...
Код: Выделить всё
#!/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: поиск и сравнение файлов в директориях
Ребята, а поискать? Есть отличная утилита именно для этих задач, fdupes называется. Она не только ищет файлы с одинаковым размером, но и проверяет, что они действительно являются дублями.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
JaGoTerr
- Сообщения: 380
Re: поиск и сравнение файлов в директориях
(G@riK @ Mar 17 2006, в 11:25) писал(а):не могу написать сравнение по имени файла, т.к. файлы с разными путями уже не уникальны и сравнение их ни к чему не приводит
man basename, i guess?
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
слишком ресурсоёмкая прога... и сканит оооочень долго
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current
Re: поиск и сравнение файлов в директориях
слишком ресурсоёмкая прога... и сканит оооочень долго
Это всё фигня. Так и должно быть. А как вы хотели, "и рыбку съесть, и на ... сесть"? Так не бывает. Попробуй-ка это всё сделать вручную.
А Тихону ОГРОМНОЕ СПАСИБО. Отличная прога. В своих 30-ти гигах аудио свалки около гига дублей выудил. Остался вопросик. Как эти дубли быстренько удалить, особо не заморачиваясь?
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
Alexxx писал(а): ↑20.03.2006 17:16слишком ресурсоёмкая прога... и сканит оооочень долго
Это всё фигня. Так и должно быть. А как вы хотели, "и рыбку съесть, и на ... сесть"? Так не бывает. Попробуй-ка это всё сделать вручную.
А Тихону ОГРОМНОЕ СПАСИБО. Отличная прога. В своих 30-ти гигах аудио свалки около гига дублей выудил. Остался вопросик. Как эти дубли быстренько удалить, особо не заморачиваясь?
там ключик -d есть, почитай, что он делает... да, у меня объём сервака 2000 Гбайт и будет расширен ещё...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current
Re: поиск и сравнение файлов в директориях
Про ключик -d я понял, что он интерактивный, что меня собственно и не устраивает, об чём и спич. Читал этот ман, перечитал, так и не въехал, млин.
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
кста, а куда он выводит результаты сканирования?
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current
Re: поиск и сравнение файлов в директориях
??? На стандартный вывод, то биш консоль. А где ты ещё видишь эти результыты? Можешь перенаправить куда нибудь в другое место.
P.S. Я себе уже сделал файлик со списком для удаления. Теперь задача: каждую строку заковычить и поставить впереди rm -f. А строчек там чуть больше двухсот.
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
Alexxx писал(а): ↑20.03.2006 18:55
??? На стандартный вывод, то биш консоль. А где ты ещё видишь эти результыты? Можешь перенаправить куда нибудь в другое место.
P.S. Я себе уже сделал файлик со списком для удаления. Теперь задача: каждую строку заковычить и поставить впереди rm -f. А строчек там чуть больше двухсот.
напиши небольшой парсер) а у меня нифига ничего не выводит, хотя я точно знаю. что есть одинаковые файлы...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current
Re: поиск и сравнение файлов в директориях
Я делал так:
Код: Выделить всё
fdupes -S -r /mnt/hda12/audio-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
делал точно также)) ничего
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current
Re: поиск и сравнение файлов в директориях
Можно легко проверить. Создай любую директорию. Слей в неё какие нибудь файлы. В неё же создай ещё одну директорию с этими же файлами и проскань.
-
G@riK
- Сообщения: 54
Re: поиск и сравнение файлов в директориях
нашёл ошибку...
Ибу ибуди - ху_ида_о муди - [Шаг за шагом можно достигнуть цели (кит.)]
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: поиск и сравнение файлов в директориях
fdupes -rf .|xargs rm -f(Alexxx @ Mar 20 2006, в 16:16) писал(а):А Тихону ОГРОМНОЕ СПАСИБО. Отличная прога. В своих 30-ти гигах аудио свалки около гига дублей выудил. Остался вопросик. Как эти дубли быстренько удалить, особо не заморачиваясь?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Alexxx
- Сообщения: 892
- Статус: --==XXX==--
- ОС: Archlinux current