Существует два каталога: a/
и b/
.
Я хотел бы скопировать все файлы (рекурсивно) из a/
в b/
.
Однако я хочу только скопировать файл a
, если его содержимое отличается от уже существующего файла b
. Если соответствующий файл b
не существует, вы все равно копируете файл a
.Как копировать разные файлы контента из одного каталога в другой?
* «соответствующий файл», я имею в виду файлы с тем же именем и относительным путем из их родительских каталогов.
Примечание: Причины, почему я не хочу, чтобы перезаписать b
файл с точно таким же содержанием, потому, что каталог b
находится под контролем другой программы, и я не хочу, дату файла для изменения заставляя программу выполнять больше работы, чем требуется.
Я по существу ищу способ выполнить cp -rf a/ b/
при выполнении проверки diff для каждого файла. Если файл отличается от другого, выполните копию; в противном случае пропустите копию.
Я вижу, что cp
имеет флаг обновления:
-u, --update
copy only when the SOURCE file is newer than the destination file or when the
destination file is missing
, но это не будет работать, потому что я не обеспокоен новыми файлами; Меня беспокоит разное содержимое файла.
Любой язык оболочки будет работать.
Я пытаюсь получить эту работу, вводя мой чек диффа в команду найти:
find a/ ??? -exec cp {} b \;
Это не кажется необычным, что нужно сделать между двумя каталогами, поэтому я надеюсь, что там это изящное решение командной строки, так как мне приходится писать сценарий python.
Если вы не заботитесь об эффективности настолько, что-то вроде 'if $ (diff a b) move' может работать. Извините, я знаю, что синтаксис неправильный, bash я всегда забываю. – Toqoz
Просто понял, что вы сказали какой-нибудь язык оболочки; 'если не diff a b; эхо «другое»; end' работает для рыбы. – Toqoz
Stack Overflow - это сайт для вопросов программирования и разработки. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww