Odpowiedzi:
Zrobione ze strony człowieka :
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
Przykład:
cp -n myoldfile.txt mycopiedfile.txt
cp -n source.txt destination.txt || true
cp -nnie wychodzi z błędem, jeśli plik istnieje w systemie Ubuntu 12.04.
Rozważ użycie rsync.
rsync -a -v --ignore-existing src dst
Zgodnie z komentarzami rsync -a -v src dstnie jest poprawny, ponieważ zaktualizuje istniejące pliki.
--ignore-existingflagę, aby zapobiec zastąpieniu istniejących plików.
rsync -a -v --ignore-existing <src> <dst>jest rzeczywiście poprawną odpowiedzią zamiast cp -upowyższej.
Działa to w RedHat:
false | cp -i source destination 2>/dev/null
Aktualizacja i nie nadpisywanie to coś innego.
falsetu robi?
-ipytania.
W przypadku osób, które nie mają opcji „n” (jak ja w RedHat), możesz użyć cp -udo zapisania pliku tylko wtedy, gdy źródło jest nowsze niż istniejące (lub nie istnieje).
[edytuj] Jak wspomniano w komentarzach, spowoduje to zastąpienie starszych plików, więc nie jest to dokładnie to, czego chciał OP. Użyj do tego odpowiedzi Cevinga.
-unaprawdę nie pasuje do celu.
Alpine linux: Poniższa odpowiedź dotyczy tylko jednego pliku: w alpine cp -nnie działa (i false | cp -i ...też), więc rozwiązanie działające w moim przypadku, które znalazłem to:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
W powyższym przykładzie, jeśli env.jsplik nie istnieje, kopiujemy env.example.jsdo env.js.