-u указывает на «обновление»: копировать только отсутствующие или старые файлы. -r указывает на «рекурсивный»: детализация структуры каталогов. Я должен был найти это, помогая другим новичкам. :-)
mightypile
для получения информации о конкретных флагах в разделах справки команд я обычно использую что-то вроде этого, <cp --help | grep -e -u> или, если вы хотите получить информацию о флаге 'r', используйте <cp --help | grep -e -r>. Он покажет вам только ту часть справки, содержание которой вы написали после "-e".
paramvir 05
Ответы:
58
Rsync лучше, поскольку он копирует только обновленные части обновленного файла, а не весь файл. При желании он также использует сжатие и шифрование. Ознакомьтесь с этим руководством .
rsync не обязательно более эффективен из-за более подробной инвентаризации файлов и блоков, которые он выполняет. Алгоритм великолепен в том, что он делает, но вам нужно понять свою проблему, чтобы знать, действительно ли он будет лучшим выбором.
В очень большой файловой системе (скажем, многие тысячи или миллионы файлов), где файлы обычно добавляются, но не обновляются, "cp -u", вероятно, будет более эффективным. cp принимает решение о копировании исключительно метаданных и может просто приступить к копированию.
Обратите внимание, что вам может потребоваться некоторая буферизация, например, с использованием tar, а не простого cp, в зависимости от размера файлов, производительности сети, другой активности диска и т. Д. Я считаю очень полезной следующую идею:
tar cf - . | tar xCf directory -
Сами по себе метаданные могут стать значительными накладными расходами в очень больших (кластерных) файловых системах, но rsync и cp будут разделять эту проблему.
rsync, кажется, часто является предпочтительным инструментом (и в приложениях общего назначения я обычно выбираю по умолчанию), но, вероятно, есть много людей, которые слепо используют rsync, не задумываясь об этом.
Команда в том виде, в котором она написана, создаст новые каталоги и файлы с текущей датой и временем, а вы будете их владельцем. Если вы единственный пользователь в своей системе и делаете это ежедневно, это может не иметь большого значения. Но если для вас важно сохранить эти атрибуты, вы можете изменить свою команду с помощью
cp -pur /home/abc/* /mnt/windowsabc/
Параметр -p сохраняет право собственности, временные метки и режим файла. Это может быть очень важно в зависимости от того, что вы копируете.
Альтернативная команда с rsync будет
rsync -avh /home/abc/* /mnt/windowsabc
При использовании rsync -a указывает «архив», в котором сохраняются все упомянутые выше атрибуты. -v указывает на «подробный», который просто перечисляет, что он делает с каждым файлом при его запуске. -z здесь не используется для локальных копий, но предназначен для сжатия, которое поможет при резервном копировании по сети. Наконец, -h указывает rsync сообщать о размерах в удобочитаемых форматах, таких как МБ, ГБ и т. Д.
Из любопытства я запустил одну копию, чтобы запустить систему и избежать смещения по сравнению с первым запуском, затем я рассчитал следующее при тестовом запуске 1 ГБ файлов с внутреннего SSD-накопителя на жесткий диск, подключенный через USB. Они просто копируются в пустые целевые каталоги.
Обе команды кажутся примерно одинаковыми, хотя сжатие и разархивирование, очевидно, обременяют систему, в которой пропускная способность не является узким местом.
Особенно, если вы используете файловую систему с копированием при записи, такую как BTRFS или ZFS, rsyncнамного лучше.
Я использую BTRFS, и у меня это есть ~/.bashrc:
alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
Важный флаг здесь для CoW FS, таких как BTRFS, заключается в том, --inplaceчто он копирует только измененную часть файлов, не создает новые для небольших изменений между индексными дескрипторами файлов и т. Д. См. Это .
Согласно --inplaceопционной инструкции : The option implies --partial. Так что я думаю, --partialэто не требуется, по крайней мере, в текущей версии.
Dcortez
4
Имейте в виду, что при внутренней передаче файлов на машине, то есть не при передаче по сети, использование флага -z может иметь огромную разницу во времени, необходимом для передачи.
Перенос внутри одной машины
Case 1: With -z flag:
TAR took: 9.48345208168
Encryption took: 2.79352903366
CP took = 5.07273387909
Rsync took = 30.5113282204
Case 2: Without the -z flag:
TAR took: 10.7535531521
Encryption took: 3.0386879921
CP took = 4.85565590858
Rsync took = 4.94515299797
Для локальной копии единственным преимуществом rsync является то, что он избегает копирования, если файл уже существует в целевом каталоге. Определение «уже существует»: (а) то же имя файла (б) тот же размер (в) та же временная метка. (Возможно, тот же владелец / группа; я не уверен ...)
«Алгоритм rsync» отлично подходит для инкрементальных обновлений файла по медленному сетевому каналу, но он не принесет вам много денег за локальную копию, так как ему нужно прочитать существующий (частичный) файл, чтобы запустить его вычисление «diff».
Поэтому, если вы часто выполняете такие команды и набор измененных файлов невелик по сравнению с общим количеством файлов, вы должны обнаружить, что rsync быстрее, чем cp. (Также у rsync есть --deleteопция, которая может оказаться вам полезной.)
Команды rsync и cp не эквивалентны и достигают разных целей.
1- rsync может сохранить время создания существующих файлов. (с использованием опции -a)
2- rsync будет запускать многопроцессорную передачу и передавать данные через локальные или сетевые сокеты. (т.е. разветвляется на несколько процессов)
3- Многопроцессорность и многопоточность увеличивают вашу пропускную способность при копировании большого количества небольших файлов и даже с несколькими большими файлами.
Таким образом, rsync предназначен для больших данных, а cp - для локального копирования меньшего размера. (От МБ до малого ГБ). Когда вы начинаете использовать несколько ГБ или диапазон ТБ, используйте rsync. И, конечно же, сетевые копии, rsync полностью.
«rsync может сохранить время создания существующих файлов. (с использованием параметра -a)» - «cp -a» может делать то же самое, и даже лучше, чем «rsync -a». «Лучше» означает сохранение как можно большего количества исходных данных и метаданных; прочтите unix.stackexchange.com/questions/443911/… . Rsync и cp почти эквивалентны в отношении -a.
Rublacava
Спасибо @Rublacava. Я искал в Интернете специально для -aсравнения.
Франсуа
1
если вы используете cp, не сохраняет существующие файлы при копировании одноименных папок. Допустим, у вас есть следующие папки:
Ответы:
Rsync лучше, поскольку он копирует только обновленные части обновленного файла, а не весь файл. При желании он также использует сжатие и шифрование. Ознакомьтесь с этим руководством .
источник
rsync не обязательно более эффективен из-за более подробной инвентаризации файлов и блоков, которые он выполняет. Алгоритм великолепен в том, что он делает, но вам нужно понять свою проблему, чтобы знать, действительно ли он будет лучшим выбором.
В очень большой файловой системе (скажем, многие тысячи или миллионы файлов), где файлы обычно добавляются, но не обновляются, "cp -u", вероятно, будет более эффективным. cp принимает решение о копировании исключительно метаданных и может просто приступить к копированию.
Обратите внимание, что вам может потребоваться некоторая буферизация, например, с использованием tar, а не простого cp, в зависимости от размера файлов, производительности сети, другой активности диска и т. Д. Я считаю очень полезной следующую идею:
Сами по себе метаданные могут стать значительными накладными расходами в очень больших (кластерных) файловых системах, но rsync и cp будут разделять эту проблему.
rsync, кажется, часто является предпочтительным инструментом (и в приложениях общего назначения я обычно выбираю по умолчанию), но, вероятно, есть много людей, которые слепо используют rsync, не задумываясь об этом.
источник
Команда в том виде, в котором она написана, создаст новые каталоги и файлы с текущей датой и временем, а вы будете их владельцем. Если вы единственный пользователь в своей системе и делаете это ежедневно, это может не иметь большого значения. Но если для вас важно сохранить эти атрибуты, вы можете изменить свою команду с помощью
Параметр -p сохраняет право собственности, временные метки и режим файла. Это может быть очень важно в зависимости от того, что вы копируете.
Альтернативная команда с rsync будет
При использовании rsync -a указывает «архив», в котором сохраняются все упомянутые выше атрибуты. -v указывает на «подробный», который просто перечисляет, что он делает с каждым файлом при его запуске. -z здесь не используется для локальных копий, но предназначен для сжатия, которое поможет при резервном копировании по сети. Наконец, -h указывает rsync сообщать о размерах в удобочитаемых форматах, таких как МБ, ГБ и т. Д.
Из любопытства я запустил одну копию, чтобы запустить систему и избежать смещения по сравнению с первым запуском, затем я рассчитал следующее при тестовом запуске 1 ГБ файлов с внутреннего SSD-накопителя на жесткий диск, подключенный через USB. Они просто копируются в пустые целевые каталоги.
Обе команды кажутся примерно одинаковыми, хотя сжатие и разархивирование, очевидно, обременяют систему, в которой пропускная способность не является узким местом.
источник
Особенно, если вы используете файловую систему с копированием при записи, такую как BTRFS или ZFS,
rsync
намного лучше.Я использую BTRFS, и у меня это есть
~/.bashrc
:Важный флаг здесь для CoW FS, таких как BTRFS, заключается в том,
--inplace
что он копирует только измененную часть файлов, не создает новые для небольших изменений между индексными дескрипторами файлов и т. Д. См. Это .источник
--inplace
опционной инструкции :The option implies --partial
. Так что я думаю,--partial
это не требуется, по крайней мере, в текущей версии.Имейте в виду, что при внутренней передаче файлов на машине, то есть не при передаче по сети, использование флага -z может иметь огромную разницу во времени, необходимом для передачи.
Перенос внутри одной машины
источник
Для локальной копии единственным преимуществом rsync является то, что он избегает копирования, если файл уже существует в целевом каталоге. Определение «уже существует»: (а) то же имя файла (б) тот же размер (в) та же временная метка. (Возможно, тот же владелец / группа; я не уверен ...)
«Алгоритм rsync» отлично подходит для инкрементальных обновлений файла по медленному сетевому каналу, но он не принесет вам много денег за локальную копию, так как ему нужно прочитать существующий (частичный) файл, чтобы запустить его вычисление «diff».
Поэтому, если вы часто выполняете такие команды и набор измененных файлов невелик по сравнению с общим количеством файлов, вы должны обнаружить, что rsync быстрее, чем cp. (Также у rsync есть
--delete
опция, которая может оказаться вам полезной.)источник
На самом деле вопрос не в том, что эффективнее.
Команды rsync и cp не эквивалентны и достигают разных целей.
1- rsync может сохранить время создания существующих файлов. (с использованием опции -a)
2- rsync будет запускать многопроцессорную передачу и передавать данные через локальные или сетевые сокеты. (т.е. разветвляется на несколько процессов)
3- Многопроцессорность и многопоточность увеличивают вашу пропускную способность при копировании большого количества небольших файлов и даже с несколькими большими файлами.
Таким образом, rsync предназначен для больших данных, а cp - для локального копирования меньшего размера. (От МБ до малого ГБ). Когда вы начинаете использовать несколько ГБ или диапазон ТБ, используйте rsync. И, конечно же, сетевые копии, rsync полностью.
источник
-a
сравнения.если вы используете cp, не сохраняет существующие файлы при копировании одноименных папок. Допустим, у вас есть следующие папки:
Затем вы копируете одно поверх другого:
результат:
По крайней мере, это то, что происходит в macOS, и я хотел сохранить файлы diff, поэтому использовал rsync.
источник