Я хочу найти все файлы в , 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/