Копирование файлов без потери прав доступа к файлам / папкам

36

Как я могу скопировать файлы / папки с компьютера с Ubuntu в файловой системе ext4 на другой компьютер с Ubuntu, который также находится в файловой системе Ext4, используя USB-флешку, которая использует файловую систему vfat без потери прав доступа к файлам?

Я попробовал базовый ctrl-c с исходного компьютера, затем ctrl-v на usb, затем ctrl-c с usb, затем ctrl-v на целевой компьютер, и ни одно из прав доступа к файлам / папкам не осталось неизменным.

oshirowanen
источник
vfatне поддерживает разрешения файловой системы unix. Вам нужно будет хранить их в архиве или чем-то подобном, если вы хотите сохранить их.
Алекс Л.
почему нет rsync, как я предположил?
SiddharthaRT

Ответы:

56

Вы можете создать tar-архив источника, скопировать его на другой компьютер с помощью USB-накопителя и распаковать его там. Tar сохраняет права доступа к файлам.

1 - На исходном компьютере:

cd /path/to/folder/to/copy
tar cvpzf put_your_name_here.tar.gz .

2 - Скопируйте put_your_name_here.tar.gzна USB-накопитель, а затем на другой компьютер

3 - На конечном компьютере:

cd /path/to/destination/folder
tar xpvzf put_your_name_here.tar.gz

tar воссоздаст структуру архивных папок со всеми разрешениями без изменений.

Эти команды будут архивировать содержимое исходной папки, а затем извлекать их в папку назначения. Если вы хотите скопировать саму папку, то на шаге 1:

cd /path/to/parent/folder
tar cvpzf put_your_name_here.tar.gz folder_to_copy

Тот же механизм может быть использован для отдельных файлов.


Если вы можете подключиться с одного компьютера к другому с помощью ssh@siddharthart answer ( rsync), возможно, будет более практичным.

sierrasdetandil
источник
Не забывайте -pфлаг, tarчтобы гарантировать, что разрешения сохранены.
хазиз
@haziz На самом деле, в -pдействительности это не нужно, см. мой комментарий к ответу @ mikewhwhat. Кроме -zтого, нет необходимости в распаковке, так как tarон может определить тип сжатия сам, если это не старая версия. Включение флагов в команду не повредит, жестко.
sierrasdetandil
3
Я не думаю, что вы можете рассчитывать на это поведение. Кстати, цитирование со страницы man tar «-p, --preserve-permissions, --same-permissions извлекает информацию о правах доступа к файлу (по умолчанию для суперпользователя)», это поведение по умолчанию, только если tar вызывается как суперпользователь. Не будет рассчитывать на это как поведение по умолчанию. Я также всегда явно указывал -zфлаг при сжатии или распаковке (или -jпри использовании bzip2).
Хазиз
Может ли (базовое) шифрование быть легко добавлено? (Я думаю, было бы много способов сделать это, но мне интересно, но если бы это было сделано через командную строку, как бы был предоставлен пароль / ключ шифрования / фраза-пароль? Например, ******** или как sudo-пароль, где никакие нажатия клавиш не видны?)
чокнутый о natty
tarстрадает от очень серьезной проблемы - он задыхается на пути длиннее 100 символов.
Натан Осман
12

Вы можете попробовать rsyncс -aфлагом, чтобы сохранить все разрешения при копировании. Я не знаю более простого решения, но в прошлом я использовал его для какой-то цели.

Rsync прекрасно поддерживает повторное копирование, обновление папок и т. Д., Оставаясь невероятно быстрым.

SiddharthaRT
источник
6
Мне это нравится rsync(на самом деле это нравится : -]), но разрешения на файл ext4 будут потеряны, если целевое устройство отформатировано в vfat, как описано в oshirowanen. tarРешение лучше в этом случае.
юрич
6

Я думаю, что тарирование и последующее удаление должны работать как с файлами, так и с каталогами.

смолить:

tar cvpfz /target.tar.gz /source/

распаковать

tar xvpfz /source/

pФлаг означает --preserve-permissions.

Вы должны увидеть man tarбольше информации.

mikewhatever
источник
Я просто сделал быстрый тест, чтобы убедиться, что -pон не нужен - tar сохраняет разрешения по умолчанию, по крайней мере, когда пользователь владеет архивируемыми / извлекаемыми файлами.
sierrasdetandil
2
Да, но вы не сказали нам, какие файлы вы хотите скопировать, и у меня не было никаких оснований предполагать что-либо самостоятельно.
независимо от того,