Интересное использование tar ... но что происходит? - PullRequest
10 голосов
/ 25 ноября 2008

Я видел следующее интересное использование tar в скриптах Bash коллеги:

`tar cf - * | (cd <dest> ; tar xf - )`

Очевидно, это работает так же, как rsync -av, но быстрее. Возникает вопрос, как?

-m


РЕДАКТИРОВАТЬ : Кто-нибудь может объяснить , почему должно ли это решение быть предпочтительным по сравнению со следующим?

cp -rfp * dest

Первый быстрее?

Ответы [ 12 ]

0 голосов
/ 25 ноября 2008

Решение tar сохранит символические ссылки, тогда как cp просто сделает копии и уничтожит ссылки.

tar был стандартной утилитой Unix намного дольше, чем rsync. Вы с большей вероятностью найдете его в ситуации, когда иерархию каталогов необходимо скопировать в другое место (даже на другой компьютер). rsync, вероятно, проще использовать в наши дни, но медленнее, потому что он сравнивает источник и места назначения и синхронизирует их. tar просто копирует в одном направлении.

0 голосов
/ 25 ноября 2008
tar cf - *

Используется tar для отправки * на стандартный вывод

|

Это делает очевидное перенаправление stdout на ...

(cd <dest> ; tar xf - )

Это, который изменяет PWD в соответствующее место, а затем извлекает из стандартного ввода

Я не знаю, почему это будет быстрее, чем rsync, так как здесь нет сжатия.

...