复制文件而不会丢失文件/文件夹权限


36

如何使用使用vfat文件系统的usb棒将文件/文件夹从ext4文件系统上的ubuntu计算机复制到也位于ext4文件系统上的另一台ubuntu计算机,而不会丢失文件权限?

我从源计算机尝试了基本的ctrl-c,然后从ctrl-v到了usb,然后从usb的ctrl-c到了目标计算机,再没有ctrl-v了,都没有文件/文件夹权限保持完整。


vfat不支持UNIX文件系统权限。如果要保留它们,则需要将它们存储在tarball或类似的文件中。
Alex L.

rsync如我所建议,为什么不呢?
SiddharthaRT

Answers:


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答案(rsync)可能更实用。


不要忘记该-p标志tar以确保保留权限。
haziz 2012年

@haziz实际上,实际上-p并不需要,请参阅我对@mikewhatever答案的评论。在-z还没有在必要时执行解压缩,因为tar能够弄清楚压缩本身的类型,除非它是一个旧版本。在命令中包含标志不会造成伤害,很难。
sierrasdetandil

3
我认为您不能指望这种行为。BTW从man tar页面引用“ -p,-preserve-permissions,-same-permissions提取有关文件权限的信息(超级用户的默认值)”,只有当tar被当作超级用户时,这才是默认行为。无法将其视为默认行为。-z在压缩或解压缩时(或-j使用bzip2时),我也会始终明确标出该标志。
haziz 2012年

可以轻松添加(基本)加密吗?(我想有很多方法可以做到这一点,但我想知道,但是如果通过命令行完成,将如何提供密码/加密密钥/密码?像这样********或就像sudo-password,其中没有显示任何按键?)
关于natty的坚果

tar遭受一个非常严重的问题-它在超过100个字符的路径上阻塞。
内森·奥斯曼

12

您可以尝试rsync使用-aflag来在复制时保留所有权限。我不知道有一个更简单的解决方案,但过去我曾将其用于特定目的。

Rsync为重复复制,更新文件夹等提供了出色的支持,同时保持了极快的速度。


6
我确实喜欢rsync(喜欢它,实际上是:-]),但是如果目标设备是vfat格式的,则ext4文件权限将丢失,如oshirowanen所述。tar在这种情况下,解决方案更好。
yuric 2013年

6

我认为先去皮然后再去皮应该在文件和目录上都起作用。

到焦油:

tar cvpfz /target.tar.gz /source/

解压:

tar xvpfz /source/

p标志代表--preserve-permissions

您应该看到man tar更多信息。


我只是做了一个快速测试来确定-p并不需要-tar默认情况下会保留权限,至少在用户拥有要归档/提取的文件时。
sierrasdetandil

2
是的,但是您没有告诉我们要复制哪些文件,因此我没有理由自己承担任何责任。
mikewhatever
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.