Ответы:
Взято из справочной страницы :
-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
.