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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Сравнение папок и добавление файлов  (Прочитано 2005 раз)

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

Оффлайн Nick222

  • Автор темы
  • Активист
  • *
  • Сообщений: 625
    • Просмотр профиля
Всем привет :)

Как лучше сделать следующее на Xubuntu 18.10:

1) Есть папка большого размера с большим количеством файлов.
2) Есть относительно небольшая папка с относительно небольшим количеством файлов.

Нужно примерно раз в неделю переносить из папки (2) в папку (1) новые файлы (имена и даты могут быть произвольными - нужно сверять контрольные суммы), а дублирующиеся файлы из папки (2) удалять.

Проблема в том, что прямое сравнение занимает много времени и ресурсов компьютера, так что я ориентировался на создание файла контрольных сумм для большой папки (1) и затем сравнение файлов из папки (2) с этим файлом контрольных сумм.

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

Крайне желательно рожать на выходе список скопированных и стёртых файлов.

Возможно ли как-то всё это сделать, чтобы данные регулярные действия не сильно грузили компьютер?

Спасибо :)
Xubuntu 25.04

Dzhoser

  • Гость
Re: Сравнение папок и добавление файлов
« Ответ #1 : 01 Декабря 2018, 08:09:30 »
Ну я не знаю насколько важен перенос задачу можно решить без переноса
В терминале переходим в папку с файлами
сd /папка1 У Вас будет свой путь
Создаем контрольный файл
md5sum * > md5sum.txtПолучаем файл с эталонными контрольными суммами md5sum.txt
теперь для проверки используем команду
md5sum -c md5sum.txt В терминале будет отображена информация о целостности или повреждении файлов.
Минус данного метода в том что новые файлы не занесенные в эталонный список проверятся не будут.
Для параноиков контрольный файл с эталонными суммами можно держать на отчуждаемом носителе.

Оффлайн Nick222

  • Автор темы
  • Активист
  • *
  • Сообщений: 625
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #2 : 01 Декабря 2018, 12:59:59 »
Спасибо, но главная проблема именно в добавлении не повторяющихся файлов...
Xubuntu 25.04

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #3 : 01 Декабря 2018, 13:07:41 »
Немного непонятно объяснили суть. Берем произвольный файл из папки2, ищем его контрольную сумму среди файлов папки1, если не находим то считаем его "новым" и переносим в папку1. Если находим такую же сумму то просто удаляем его из папки2. В итоге папка2 пустая. Все верно?
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Nick222

  • Автор темы
  • Активист
  • *
  • Сообщений: 625
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #4 : 01 Декабря 2018, 13:12:33 »
Да, верно. И так регулярно.
Xubuntu 25.04

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #5 : 01 Декабря 2018, 13:23:40 »
Надо сделать список файлов папки1cd путь/папка1
md5sum * > md5sum.txt
С помощью его теперь будем проверять папку2
Код: (bash) [Выделить]
#! /bin/bash

cd путь/папка2
for cfile in * ; do
    file_sum=$(md5sum "$cfile")
    if grep -Fq "${file_sum%% *}" путь/папка1/md5sum.txt ; then
        rm -v "$cfile"
    else
        mv -v "$cfile" путь/папка1
        echo "$file_sum" >> путь/папка1/md5sum.txt
    fi
done
Сохраняете скрипт, присваиваете исполняемый бит и запускаете когда надо
« Последнее редактирование: 01 Декабря 2018, 13:25:29 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #6 : 01 Декабря 2018, 14:01:49 »
Чуть более быстрый
Код: (bash) [Выделить]
#! /bin/bash
 
cd путь/папка2
for cfile in * ; do
    file_sum=$(md5sum "$cfile")
    if grep -Fq "${file_sum%% *}" путь/папка1/md5sum.txt ; then
        rm -v "$cfile"
    else
        sline=${sline:+"$sline"$'\x0a'}"$file_sum"
    fi
done
mv -vt путь/папка1 *
echo "$sline" >> путь/папка1/md5sum.txt
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Nick222

  • Автор темы
  • Активист
  • *
  • Сообщений: 625
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #7 : 01 Декабря 2018, 14:03:02 »
Спасибо, попробую...

А если в папке 1 и в папке 2 есть подпапки, то нужно сильно менять сравнение и перенос?
Ведь на вычисление контрольной суммы в папке 1 наличие подкаталогов влиять вроде не должно?
А вот как сохранить структуру каталогов при их переносе из папки 1 в папку 2 ?

Пользователь добавил сообщение 01 Декабря 2018, 14:04:37:
Извините, про sline не очень понял...

Пользователь добавил сообщение 01 Декабря 2018, 14:09:55:
И ещё вопрос, если можно, - если у старого и нового файла обязательно совпадает расширение (но не имя и дата), то не облегчит ли это задачу?
« Последнее редактирование: 01 Декабря 2018, 14:09:55 от Nick222 »
Xubuntu 25.04

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #8 : 01 Декабря 2018, 14:24:11 »
если в папке 1 и в папке 2 есть подпапки
нужно сильно менять сравнение и перенос
чтобы
сохранить структуру каталогов при их переносе
вычисление контрольной суммы в папке 1 наличие подкаталогов
будет
влиять
у старого и нового файла обязательно совпадает расширение
У всех проверяемых файлов? Оно одно?
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Nick222

  • Автор темы
  • Активист
  • *
  • Сообщений: 625
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #9 : 01 Декабря 2018, 14:33:17 »
Странно - я посмотрел - судя по всему, программа просто пропускает каталоги при вычислении контрольных сумм файлов. Во всяком случае в итоговом файле контрольных сумм никакого следа каталогов нет.
Разве контрольная сумма файла зависит от его расположения в дереве каталогов?

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

Про скрипт: может быть, решить эту проблему так
- сначала удалять из папки 2 все дубликаты с папкой 1,
- а потом перенести все оставшиеся в папке 2 файлы в папку 1 (с сохранением структуры папок папки 2 и с дописыванием в имеющиеся совпадающие подпапки в папке 1, и с автоматическим переименованием совпадающих имён файлов) ?

Это возможно? Не сложно?
« Последнее редактирование: 01 Декабря 2018, 14:38:31 от Nick222 »
Xubuntu 25.04

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #10 : 01 Декабря 2018, 15:10:30 »
Скрипт с учетом подпапок#! /bin/bash
find путь/папка1 -type f ! -exec grep -qF {} $HOME/md5sum.txt \; -exec md5sum {} + >> $HOME/md5sum.txt
cd путь/папка2
find . -type f -exec bash -c 'grep -Fq $(md5sum {} | cut -f1) $HOME/md5sum.txt' \; -delete -print
find . -type d -empty -delete
cp --verbose --recursive --target-directory="путь/папка1" *
rm -r *
« Последнее редактирование: 01 Декабря 2018, 15:13:21 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Nick222

  • Автор темы
  • Активист
  • *
  • Сообщений: 625
    • Просмотр профиля
Re: Сравнение папок и добавление файлов
« Ответ #11 : 01 Декабря 2018, 15:23:34 »
Спасибо большое :)
Xubuntu 25.04

 

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