Відповіді:
Зі сторінки чоловіка :
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
Приклад:
cp -n myoldfile.txt mycopiedfile.txt
cp -n source.txt destination.txt || true
cp -n
не виходить із помилкою, якщо файл існує на Ubuntu 12.04.
Подумайте про використання rsync
.
rsync -a -v --ignore-existing src dst
Згідно з коментарями, rsync -a -v src dst
це невірно, оскільки воно буде оновлювати наявні файли.
--ignore-existing
прапор, щоб запобігти перезапису існуючих файлів.
rsync -a -v --ignore-existing <src> <dst>
- це справді правильна відповідь, а не cp -u
вище.
Це буде працювати над RedHat:
false | cp -i source destination 2>/dev/null
Оновлення та не перезапис - це щось інше.
false
тут роблять?
-i
питання.
Для людей, які виявили, що у них немає опції 'n' (як, наприклад, у RedHat), ви можете використовувати cp -u
файл лише для запису файлу, якщо джерело є новим, ніж існуюче (або його немає).
[редагувати] Як згадувалося в коментарях, це перезаписує старіші файли, тож не зовсім те, що хотіла ОП Використовуйте для цього відповідь Севінга.
-u
насправді не відповідає цілі.
Alpine Linux: Нижче відповідь тільки для випадку одного файлу: в альпійському cp -n
не працює (і false | cp -i ...
теж) , так що рішення працює в моєму випадку , що я знайшов:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
У наведеному вище прикладі , якщо env.js
файл не існує , то ми копіюємо env.example.js
в env.js
.