У Патрика это более или менее правильно, но вот почему. Способ, которым вы копируете файл в UNIX, работает следующим образом:
- Попробуйте прочитать несколько (более) байтов из
fileA
.
- Если нам не удалось получить байты, потому что мы находимся (или прошли) конец файла, мы закончили; уволиться.
- В противном случае запишите байты в
fileB
и вернитесь к шагу 1.
Зная это, и зная, что это так просто, давайте рассмотрим некоторые угловые случаи.
Как только мы найдем конец файла, копия будет готова. Допустим, наш файл увеличивается во время копирования, но растет медленнее, чем мы его копируем. Программа копирования будет продолжать превышать исходный размер файла, потому что к тому времени, когда он туда попадает, в файле появляется больше. Но в какой - то момент, он догоняет конец файла, и он знает , что это в конце , потому что он не может читать больше байтов прямо сейчас . Таким образом, он завершает работу, даже если файл будет расти дальше.
Если файл обрезан, программа копирования говорит: «Ух, конец файла!» и выходит.
И если части файла обновляются случайным образом, скажем, с помощью программы базы данных :-), то ваша копия будет представлять собой смесь старых и новых данных, потому что данные не все копируются одновременно. Результатом, вероятно, будет поврежденная копия, поэтому делать копии живых баз данных обычно не очень хорошая идея.
(Тем не менее, я не знаком с CouchDB, и возможно спроектировать базу данных так, чтобы она была устойчивой к такого рода коррупции. Но лучше быть абсолютно уверенным.)