9

Для рекурсивного копирования каталога использование tar для упаковки каталога, а затем передача выходных данных в другой tar для распаковки выглядит намного быстрее, чем использование cp -r (или cp -a).

Почему это? И почему нельзя сделать cp быстрее, если сделать то же самое под капотом?

Редактировать: я заметил эту разницу при попытке скопировать огромную структуру каталогов, содержащую десятки тысяч файлов и папок, глубоко вложенных, но общим объемом около 50 МБ. Не уверен, что это актуально.

1 ответ1

5

Cp делает цикл открытия-чтения-закрытия-открытия-записи-закрытия по всем файлам. Таким образом, чтение из одного места и запись в другое происходят полностью чередующимися. Tar|tar выполняет чтение и запись в отдельных процессах, и, кроме того, tar использует несколько потоков для чтения (и записи) нескольких файлов «одновременно», эффективно позволяя контроллеру диска извлекать, буферизовать и хранить много блоков данных одновременно. В общем, tar позволяет эффективно работать каждому компоненту, в то время как cp решает проблему разрозненными, неэффективно небольшими порциями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .