Как `--no-clobber` с` docker cp`? Копировать файл из Docker контейнера, но не перезаписывать, если место назначения уже существует - PullRequest
0 голосов
/ 03 марта 2020

Я хочу скопировать файл из контейнера Docker:

docker cp MY_CONTAINER_NAME:/path/to/file /destination/path

Однако, docker cp, похоже, не имеет опции --no-clobber, как обычный cp имеет. Итак, как я могу скопировать файл без перезаписи места назначения, если он уже существует?

Простая проверка на наличие места назначения до запуска docker cp не атоми c и уязвима в состоянии гонки.

1 Ответ

0 голосов
/ 03 марта 2020

Я бы использовал следующий скрипт:

#!/bin/bash

set -o noclobber
{ > /destination/path ; } &> /dev/null

if [ $? -ne 0 ] ; then
    echo 'already exists!'
    exit 1
fi

docker cp MY_CONTAINER_NAME:/path/to/file /destination/path

noclobber предотвратит случайную перезапись при перенаправлении вывода. Перенаправление вернет ненулевой код завершения, если файл уже существует.

РЕДАКТИРОВАТЬ:

Я нашел этот SO-ответ, который использует точно такое же решение: atomi c create файл, если не существует из bash script

Возможно, другие комментарии помогут.

...