2016-08-30 7 views
0

У меня был большой файл, который я двигаюсь. Обычный протокол в лаборатории должен скопировать его где-нибудь, а затем удалить.Почему копия медленнее, чем перемещение?

Я решил изменить его на mv.

Вопрос в том, почему mv намного быстрее, чем cp?

Чтобы проверить это, я создал файл размером 2.7 ГБ.

time cp test.txt copy.txt 

Принимал реальные 0m20.113s

time mv test.txt copy.txt 

Взял реальные 0m12.403s.

TL; DR mv было почти в два раза быстрее, чем копия. Любые объяснения? Это ожидаемый результат?

Edit-

Я решил переместить/скопировать папку назначения, кроме текущей папки.

time cp test.txt ../copy.txt 

и

time mv test.txt ../copy.txt 

На этот раз сП принял 9.238s и мв взял только 0.297s. Поэтому не то, что предлагали некоторые из ответов.

UPDATE

Ответы правильно. Когда я попытался записать mv файл на другой диск в той же системе, mv и cp заняли почти одно и то же время.

+1

Здесь есть несколько переменных. Если исходные и целевые файловые системы разные, то 'mv' не может быть намного быстрее, чем' cp'. Но если они одинаковые, то 'mv' влечет за собой просто изменение записи _directory_ для файла, содержимое остается неизменным. Это должно быть быстрее, чем когда нужно копировать все содержимое. –

+0

Когда вы перемещаете файл на одном диске, он фактически не перемещается. Его физическое местоположение будет там, и только индексы получат обновление.Попробуйте перейти на другой диск, и вы узнаете. –

+0

@terminalninja Вы имеете в виду scp? – VM17

ответ

5

Когда вы mv файл в той же файловой системе, система просто должна изменить записи каталога, чтобы отразить ваше переименование. Данные в файле даже не читаются.

(такая же файловая система означает: тот же каталог или же дерево каталогов/тот же диск, при условии, что исходные и целевые каталоги не пересекают символические ссылки, ведущий к другой файловой системе, конечно!)

Когда вы мв файла через файловые системы, он имеет тот же эффект, что и cp + rm: нет коэффициента усиления скорости (кроме того, что вы выполняете только одну команду, и согласованность гарантирована: вам не нужно проверять, удалось ли cp выполнить rm)

(более старые версии mv отказались переместить каталоги в файловых системах, поскольку они только переименовали)

Будьте осторожны, это не эквивалентно. cp перезаписывает адресат по умолчанию, тогда как mv не сможет переименовать файл/директорию в существующий файл/каталог.

+0

Проверьте мои изменения. – VM17

+0

такая же файловая система означает: тот же каталог или то же дерево каталогов/тот же диск. Родительский каталог по-прежнему быстрый, потому что тот же диск. Это переименование, но в другом каталоге. –