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

Как я могу сравнить все файлы в двух каталогах и скопировать те, которые отличаются от другого каталога? Например, скажем, у нас есть 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

    Как настроить iptables для pppoe?

    Запуск нескольких программ в фоновом режиме и проверка их возвращаемого значения

    Как сделать файловую систему при заданном смещении байта

    Правильно ли он работает на сервере Tomcat? Почему кажется, что он не слушает порт 8080?

    Как название группы работает при создании любого файла?

    проблема сценария оболочки с использованием операторов

    Означает ли следующая ошибка, что моя система скомпрометирована?

    настройка для прослушивания по-разному в зависимости от запрашиваемого домена

    Почему студия Android жалуется на OpenJDK?

    Network Manager не выполняет переключение между сетями по умолчанию

    Regex to Cisco Interface

    Как я могу сначала показать «ls» dotfiles, оставаясь без учета регистра?

    Как мне grep найти файл, соответствующий строке, заключенной в подстановочные знаки

    Предотвратить странные символы сеанса «Экран»

    Как увеличить количество inodes при разбиении на разделы во время установки Debian?

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