Linux как скопировать, но не перезаписать?
Я хочу cp
каталог, но я не хочу, чтобы перезаписать существующие файлы, даже если они старше скопированные файлы. И я хочу сделать это полностью неактивным, так как это будет частью сценария Crontab Bash. Есть идеи?
6 ответов:
взято с на странице:
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
пример:
cp -n myoldfile.txt mycopiedfile.txt
рассмотрите возможность использования
rsync
.rsync -a -v --ignore-existing src dst
как в комментарии
rsync -a -v src dst
это не правильно, потому что он будет обновлять существующие файлы.
для людей, которые находят, что не имеют ' N ' вариант (как я на RedHat) вы можете использовать
cp -u
только для записи файла, если источник является более новым, чем существующий (или нет существующего).[edit] Как упоминалось в комментариях, это будет перезаписывать старые файлы, так что это не совсем то, что хотел OP. Ответ использовать ceving для этого.
Это будет работать на RedHat:
false | cp -i source destination 2>/dev/null
обновление и не перезаписывая Это что-то другое.
Alpine linux: ниже Ответ только для случая одного файла: в alpine
cp -n
не работает (иfalse | cp -i ...
тоже) так что решение работать в моем случае, что я нашел:if [ ! -f env.js ]; then cp env.example.js env.js; fi
В приведенном выше примере мы проверяем, если
env.js
файл существует, и если мы не копируемenv.example.js
какenv.js
.