Відповіді:
Зі сторінки чоловіка :
-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.