Например,
tar -cSf - -C /mnt/abc . | tar xvf - -C /mnt/def
разве это не то же самое, что:
cp -RT /mnt/abc /mnt/def
?
Например,
tar -cSf - -C /mnt/abc . | tar xvf - -C /mnt/def
разве это не то же самое, что:
cp -RT /mnt/abc /mnt/def
?
Они в основном одинаковы в том смысле, что они оба сделают копию дерева каталогов. Они отличаются в своей обработке метаданных.
tar cf - … | tar xf - …
маршалирует все данные через формат tar. Это означает, что любые метаданные, которые не могут быть представлены в формате tar, будут потеряны. Существует несколько вариантов формата tar, поэтому, что именно будет потеряно, будет зависеть от реализации tar. Вот несколько ограничений текущего tar GNU (некоторые из них могут быть преодолены путем переключения на другой формат tar):
cp -RT
не сохраняет много метаданных. В частности, это не сохранит время файла и владельца. С другой стороны, с помощью GNU cp, cp -a
будет сохранять почти все метаданные (я не смог их опровергнуть, за исключением, возможно, времени доступа к каталогам в угловых случаях и временных меток в некоторых операционных системах).
cp
будет копировать символ за символом. Используя поддержку каналов ядра, мы можем копировать файлы блок за блоком. Причина, по которой я использовал tar в прошлом, была для передачи по сети, как показано ниже:
tar czv ListOfFiles | ssh remote.box.com tar xz -C /home/user/PathToCopy
Смотрите эту ссылку для более подробной информации.
с помощью tar-копии вы можете:
tar будет обрабатывать больше вещей, таких как разреженные файлы, разрешения и ссылки.
Ваша команда cp
не сохранит временные метки, вам нужно добавить ключ -p
. -d
также понадобится для сохранения символических ссылок.