Копіювання файлу лише тоді, коли він новіший за призначення


36

Як скопіювати файл у Linux лише тоді, коли файл, який копіюється, новіший за версію в пункті призначення?

Якщо файл у пункті призначення новіший, я хочу, щоб копія файлу не працювала далі.

Відповіді:


54

Використовуючи опцію оновлення (-u) з cp, слід зробити це за вас.

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


19
Щоб заощадити майбутніх читачів на деякий час: це питання позначено тегом Linux. У реалізаціях cp, що не є GNU (BSD, macOS, тощо) немає -uможливості. Ви можете використовувати rsync --updateзамість цього.
користувач31389

17

Використовуйте rsync

rsync --progress -r -u /from/one/* /to/another/directory

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

6

Ви не говорите, яку оболонку ви використовуєте, тому я припускаю ksh:

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

Хіба це башти не найпоширеніші?
Роб

1
@Rob, так. Очевидно, це працює і в баші. У мене просто не було під рукою 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.