Например,

tar -cSf - -C /mnt/abc . | tar xvf - -C /mnt/def

разве это не то же самое, что:

cp -RT /mnt/abc /mnt/def

?

5 ответов5

2

Они в основном одинаковы в том смысле, что они оба сделают копию дерева каталогов. Они отличаются в своей обработке метаданных.

tar cf - … | tar xf - … маршалирует все данные через формат tar. Это означает, что любые метаданные, которые не могут быть представлены в формате tar, будут потеряны. Существует несколько вариантов формата tar, поэтому, что именно будет потеряно, будет зависеть от реализации tar. Вот несколько ограничений текущего tar GNU (некоторые из них могут быть преодолены путем переключения на другой формат tar):

  • Может быть ограничение на такие вещи, как длина имени файла (255 байтов в порядке, я не знаю точного ограничения), идентификаторы пользователей и групп (до 65535 в порядке), размеры файлов (до 8 ГБ в порядке), и т.п.
  • Например, файлы, путь которых превышает 100 символов и которые содержат не менее двух жестких ссылок в копируемом дереве, не будут скопированы правильно (я точно забыл, каково это поведение).
  • Списки контроля доступа не будут реплицироваться.
  • Метки времени будут точны только с точностью до секунды.

cp -RT не сохраняет много метаданных. В частности, это не сохранит время файла и владельца. С другой стороны, с помощью GNU cp, cp -a будет сохранять почти все метаданные (я не смог их опровергнуть, за исключением, возможно, времени доступа к каталогам в угловых случаях и временных меток в некоторых операционных системах).

2

cp будет копировать символ за символом. Используя поддержку каналов ядра, мы можем копировать файлы блок за блоком. Причина, по которой я использовал tar в прошлом, была для передачи по сети, как показано ниже:

tar czv ListOfFiles | ssh remote.box.com tar xz -C /home/user/PathToCopy

Смотрите эту ссылку для более подробной информации.

1

с помощью tar-копии вы можете:

  • поместите другие программы между каналами (например, pv для измерения скорости копирования)
  • или netcat для переноса на другую машину
  • Вы можете использовать --include и --exclude, чтобы избежать копирования некоторых файлов или включить только определенные файлы
0

tar будет обрабатывать больше вещей, таких как разреженные файлы, разрешения и ссылки.

0

Ваша команда cp не сохранит временные метки, вам нужно добавить ключ -p . -d также понадобится для сохранения символических ссылок.

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