Копирование файла только тогда, когда он новее, чем место назначения

36

Как мне скопировать файл в Linux, только если копируемый файл новее, чем версия в месте назначения?

Если файл в месте назначения более новый, я хочу, чтобы копия файла не выполнялась.

Eli
источник

Ответы:

54

Использование опции обновления (-u) с cp должно сделать это за вас.

http://beginnerlinuxtutorial.com/help-tutorial/basic-linux-commands/cp-linux-copy-command/

Деннис
источник
19
Чтобы сэкономить время будущим читателям: этот вопрос помечен Linux. В реализациях не-GNU cp (BSD, macOS и т. Д.) Такой -uопции нет. Вы можете использовать rsync --updateвместо этого.
user31389
17

Используйте rsync

rsync --progress -r -u /from/one/* /to/another/directory
gnod
источник
3
Просто для полноты: -rозначает рекурсивную операцию в подкаталогах и -uсохранение новых файлов в месте назначения (= update). --progressпоказывает информацию о прогрессе во время работы.
Йорг
6

Вы не говорите, какую оболочку вы используете, поэтому я собираюсь предположить ksh:

if [[ file1 -nt file2 ]]; then cp file1 file2; fi
Kusalananda
источник
Разве Bash не самый распространенный?
Роб
1
@ Роб, да. Очевидно, это работает и в bash. У меня просто не было bash (или любого стандартного Linux-бокса) под рукой, когда я его писал.
Кусалананда
4

yes|cp -ruv /from/* /to/.
да - ответь да на все вопросы.
r - рекурсивный
u - обновление
v - прогресс

работает как xargs .

Я не знаю, как объяснить академически.

Как заставить cp перезаписать без подтверждения

Фелиппе Сильвестр
источник
1
Это немного загадочно. Можете ли вы расширить свой ответ, чтобы быть немного более четким, может быть, включить пример? Спасибо. Из обзора
fixer1234
да -> Ответь да на все вопросы.
Фелиппе Сильвестр