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


36

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

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

Ответы:


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

3
Просто для полноты: -rозначает рекурсивную операцию в подкаталогах и -uсохранение новых файлов в месте назначения (= update). --progressпоказывает информацию о прогрессе во время работы.
Йорг

6

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

if [[ file1 -nt file2 ]]; then cp file1 file2; fi

Разве Bash не самый распространенный?
Роб

1
@ Роб, да. Очевидно, это работает и в bash. У меня просто не было bash (или любого стандартного Linux-бокса) под рукой, когда я его писал.
Кусалананда

4

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

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

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

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


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

да -> Ответь да на все вопросы.
Фелиппе Сильвестр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.