У меня следующая структура каталогов.
dirA / [fileA, someB, barC, fileD, someE, barF] dirB / [fileA, barC, someE]
Я хочу скопировать только файлы из dirA в dirB, которые уже присутствуют в dirB. Как мне сделать эту выборочную копию?
Например, вы можете использовать команду find с опцией -exec. Вы, вероятно, использовали бы некоторый синтаксис, подобный следующему (должен быть запущен в dirB, и имейте в виду, что он рекурсивный):
find ./ -type f -exec cp '../dirA/{}' ./ \;
-type f сообщает find, чтобы принимать во внимание только обычные файлы, -exec говорит: выполните следующую команду для каждого файла. \; в конце завершает команду для запуска. {} - это заполнитель, который заменяется фактическим именем файла командой find. Посетите справочную страницу поиска для получения подробной информации и других примеров использования.
Вот что происходит на моем ПК:
desktop:~$ mkdir dirA
desktop:~$ mkdir dirB
desktop:~$ cd dirA
desktop:~/dirA$ touch foo bar this
desktop:~/dirA$ cd ..
desktop:~$ cd dirB
desktop:~/dirB$ touch bar this
desktop:~/dirB$ find ./ -type f -exec cp -v '../dirA/{}' ./ \;
»../dirA/./this“ -> »./this“
»../dirA/./bar“ -> »./bar“