Сравнение каждого файла в двух каталогах и копирование его на другой, если он отличается от его аналога

Как я могу сравнить все файлы в двух каталогах и скопировать те, которые отличаются от другого каталога? Например, скажем, у нас есть dir1 и dir2 :

dir1: build.gradle gradle.properties somejar.jar javacode.java anotherjar.jar dir2: build.gradle <-- different from build.gradle in dir1 gradle.properties somejar.jar javacode.java <-- different from javacode.java in dir1 yetanotherjar.jar 

Как создать новый каталог dir3, который содержит разные файлы из dir2 , общие файлы в dir1 и dir2 и все необычные файлы как в dir1, так и в dir2 ? dir3 должен содержать:

 dir3: build.gradle <-- from dir2 gradle.properties <-- these are common files both in dir1 and dir2 somejar.jar <-- javacode.java <-- from dir2 anotherjar.jar <-- from dir1 yetanotherjar.jar <-- from dir2 

  • Скопировать файлы из списка в папку
  • Расширенная фильтрация файлов
  • 4 Solutions collect form web for “Сравнение каждого файла в двух каталогах и копирование его на другой, если он отличается от его аналога”

    Все что тебе нужно это

     cp -n dir2/* dir1/* dir3/ 

    Правильно ли я понимаю вас в том, что dir3 должен содержать все файлы из двух базовых каталогов, и если файл появляется в обоих каталогах, должен быть dir2 один из dir2 ? Тогда простой

     cp dir1/* dir3/ cp dir2/* dir3/ 

    должен сделать трюк: файлы, которые отличаются в обоих исходных каталогах, будут перезаписаны версией из dir2 . Если вы не хотите копировать одинаковые файлы дважды, вы можете также rsync их вместо cp ing.

    Один из способов сделать это:

     cp -a /path/to/dir2/* /path/to/dir3 cd /path/to/dir1 comm -23 <(ls -1 | sort) <(cd /path/to/dir2; ls -1 | sort) | cpio -pam /path/to/dir3 

    Предполагается, что в файлах dir1 и dir2 есть файлы (т. Е. Нет подкаталогов), а ваши имена не содержат строк новой строки. Он также предполагает, что ваша оболочка достаточно умна для обработки конструкций <(...) .

    cp -pu dir2/* dir1/* dir3/

    от человека:

     -p same as --preserve=mode,ownership,timestamps -u copy only when the SOURCE file is newer than the destination file or when the destination file is missing 

    Заметка:

    1. Всегда сначала помещайте обновленный каталог. (Из примера выше: cp -pu dir1/* dir2/* dir3/ не будет копировать обновленные файлы)
    2. dir3 должен существовать.
    Interesting Posts

    Как взаимодействовать с сообщением об ошибке Fedora 23 в dnf установить ошибку dnspython?

    Как настроить постфикс для отправки почты на внешний SMTP-сервер?

    Почему файловая система ext4 лучше NTFS?

    Почему появляется предупреждение «BUG» при просмотре определенного pdf-файла?

    Что представляют собой все изображения на передней панели «Руководства по системному администрированию Unix и Linux»?

    Почему «wc -c» печатает значение еще одного с эхом?

    Использует ли опция -depth find для пересечения дерева по глубине?

    Как изменить вывод в командной строке bash

    Изменить таблицу разделов с помощью GParted

    Карта памяти USB не смонтирована – Не разрешено

    Выполнение выражения Bash из sudo

    Возможно ли иметь симулятор iOS в моем Монетном дворе Linux?

    Фильтрация мостовых пакетов по IP-адресу

    Почему sudo -i не устанавливает XDG_RUNTIME_DIR для целевого пользователя?

    debian 8.2 больше не может su root

    Linux и Unix - лучшая ОС в мире.