У меня следующая структура каталогов.
dirA/[файлA, некстB, barC, файлD, некстE, barF] dirB/[файлA, barC, некстE]
Я хочу скопировать только те файлы из dirA в dirB, которые уже присутствуют в dirB. Как мне сделать это выборочное копирование?
решение1
Например, вы можете использовать команду find с опцией -exec. Вероятно, вы бы использовали синтаксис вроде следующего (должен быть запущен в dirB, и учтите, что он рекурсивный):
find ./ -type f -exec cp '../dirA/{}' ./ \;
-type f сообщает find, что нужно учитывать только обычные файлы, -exec говорит: выполнить следующую команду для каждого файла. \; в конце завершает команду, которую нужно выполнить. {} — это заполнитель, который find заменяет фактическим именем файла. Ознакомьтесь с man-страницей 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“