Найти и заменить все одинаковые файлы в двух каталогах

Найти и заменить все одинаковые файлы в двух каталогах

Я хочу найти все файлы в , dir1имеющие одинаковые имена файлов в dir2, и заменить их файлами из dir2.

Например:

dir1: first.txt second.txt
dir2: third.txt first.txt

Поэтому я хочу удалить dir1старый first.txtфайл и заменить его first.txtна dir2.

Как этого добиться с помощью терминала Bash?

решение1

На самом деле, есть одна команда, которая делает именно то, что вы просите.

rsync -av --existing dir2/ dir1/

Это приведет к рекурсивному копированию файлов из dir2 в dir1 только в том случае, если файл уже существует в dir1.

Параметры -av— это параметры, которые вы обычно будете использовать для копирования файлов с помощью rsync.

Эта --existingопция позволяет rsyncпропустить создание новых файлов на приемнике.

В командной строке необходимо указать завершающий слеш для dir2/, поскольку rsyncон ведет себя иначе, чем большинство команд, в которых слеш имеет значение для rsync.

rsyncтакже может использоваться в сети аналогично scp.

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

решение2

rsync может сделать это с помощью --existingопции:

rsync -v --existing dir2/* dir1/

Связанный контент