Вернуться   Форум об интернет-маркетинге > >
Ответ
 
Опции темы
Старый 02.12.2009, 05:53   #1
Аспирант
 
Аватар для mnn
 
Регистрация: 21.01.2008
Сообщений: 169
Репутация: 17669

Question Сравнение двух директорий (знатоки линукса, помогите)

Есть два каталога с сотнями тысяч файлов, имеющие одинаковую структуру. Оба находятся на одном диске сервера (CentOS). Пример:

dir1/file1
dir1/subdir/file2
dir1/subdir/file3

dir2/file1
dir2/subdir/
dir2/subdir/file3

Файлы одноимённые, но не одинаковые (dir1/file1 и dir2/file1 - разные файлы).

В dir2 нет некоторых файлов, которые есть в dir1. Нужно сравнить эти два каталога, и удалить из dir1 файлы, отсутствующие в dir2 (в примере выше это файл dir1/subdir/file2, который нужно удалить).

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

Прошу знатоков подсказать решение.
mnn вне форума   Ответить с цитированием

Реклама
Старый 02.12.2009, 06:34   #2
Boris A Dolgov
Академик
 
Аватар для Boris A Dolgov
 
Регистрация: 04.07.2007
Адрес: ISPlicense.ru
Сообщений: 2,599
Репутация: 129039
Отправить сообщение для Boris A Dolgov с помощью Skype™
Социальные сети Профиль на Хабрахабре

По умолчанию Ответ: Сравнение двух директорий (знатоки линукса, помогите)

cd dir1;
find -type f | while read fname; do
[ ! -e "/path/to/dir2/$fname" ] && rm -f $fname
done

Наверно, так, но лучше сначала попробовать на кошках.
__________________
С уважением, Борис Долгов.
Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru
Boris A Dolgov вне форума   Ответить с цитированием
Старый 02.12.2009, 13:19   #3
myhand
Академик
 
Регистрация: 16.09.2009
Сообщений: 4,853
Репутация: 138734

По умолчанию Ответ: Сравнение двух директорий (знатоки линукса, помогите)

запускать rm на каждый найденный файл - замучаетесь (man xargs):
Код:
cd /path/to/dir1;
find . -type f | while read f; do
[ -e "/path/to/dir2/$f" ] || echo $f
done | xargs -n100 rm -f
а вот test, read и echo - встроенны в большинство sh-интерпретаторов (bash, например)
__________________
Абонементное сопровождение серверов (Debian)
Отправить личное сообщение,
написать письмо.
myhand вне форума   Ответить с цитированием
Старый 06.12.2009, 06:30   #4
mnn
Аспирант
 
Аватар для mnn
 
Регистрация: 21.01.2008
Сообщений: 169
Репутация: 17669

ТопикСтартер Ответ: Сравнение двух директорий (знатоки линукса, помогите)

Boris A Dolgov, myhand,

Спасибо большое!

myhand, Т. к. ваш вариант, судя по всему, обрабатывает быстрее, воспользовался им.
Добавив аргумент -t команде xargs - получил лог удаляемых файлов (может, кому пригодится)

Последний раз редактировалось mnn; 06.12.2009 в 07:02..
mnn вне форума   Ответить с цитированием
Ответ



Опции темы

Быстрый переход


Регистрация Справка Календарь Поддержка Все разделы прочитаны