Ответы:
Взято из справочной страницы :
-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выше.
cp -n
Это то, что вы хотите. Смотрите справочную страницу.
Это будет работать на RedHat:
false | cp -i source destination 2>/dev/null
Обновление, а не перезапись это нечто другое.
falseздесь делать?
-iвопросы.
Для людей, которые находят, что у них нет опции 'n' (как я в RedHat), вы можете использовать, cp -uчтобы записать файл, только если источник новее, чем существующий (или не существует).
[edit] Как уже упоминалось в комментариях, это перезапишет старые файлы, поэтому не совсем то, что хотел ОП. Используйте ответ ceving для этого.
-uсамом деле не соответствует цели.
Alpine Linux: ниже ответ только для случая одного файла: в Alpinecp -n не работает (и false | cp -i ...тоже), поэтому решение, работающее в моем случае, которое я нашел, это:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
В приведенном выше примере, если env.jsфайл не существует, мы копируем env.example.jsв env.js.