如何在Cygwin中使用cp.exe并保留文件权限

7

我正在使用Cygwin中的cp.exe在Windows 7上复制文件。不幸的是,当我这样做时,文件的权限会发生变化。

我尝试使用以下命令:

cp --preserve=all

但这也不起作用,当我检查原始文件和副本的安全性时,副本有不同的权限。

显然,在使用Cygwin复制时有一种方法可以保留权限,但我找不到它。


1
cp --preserver=all 可能是使用 cp 命令时最好的选择。具体来说,哪些权限不同?您要复制到 FAT32 文件系统吗?如果是,则可能不支持所需的权限。 - Keith Thompson
似乎原始权限被完全忽略了。这是NTFS - Win7。 - mlissner
@KeithThompson cp --preserve=all 在win7上至少不起作用。Cygwin的cp权限仍然混乱! - hawk
2个回答

10

我相信在 /etc/fstab 中为 /cygdrive 挂载点添加 noacl 选项将实现您想要的功能。

$ cat fstab
# For a description of the file format, see the Users Guide   
# http://cygwin.com/cygwin-ug-net/using.html#mount-table

# This is default anyway:
# none /cygdrive cygdrive binary,posix=0,user 0 0
none /cygdrive cygdrive binary,posix=0,user,noacl 0 0

参见http://cygwin.com/cygwin-ug-net/using.html#mount-table 和来自cygwin邮件列表的讨论


1
无法正常工作,一个简单的mkdir会破坏NTFS ACL继承并创建一堆新的权限,有时还会使目录对于最初创建它们的用户不可浏览(在rsync操作期间经常发生)。因此,使用noacl挂载只是部分解决方案,但这仍然不能让cygwin表现出我期望的方式。关于这个问题有很多讨论,对我来说,这是cygwin的一个明显缺陷。 - jdehaan
@jdehaan 我检查了最新的Cygwin和CMD.exe,mkdirnoacl效果下设置了与Cygwin相同的权限。请检查你的/etc/fstab - gavenkoa
@jdehaan 你还需要添加这一行 F:\cygwin / ntfs override,binary,auto,noacl 0 0 - Badr Elmers

8

在上面提出问题后,我进行了更多的调查。

根据与Cygwin开发人员之一的讨论,似乎Cygwin并不关心Windows权限,而只使用POSIX权限。

据我所知,POSIX权限是与Windows权限完全分离的东西,因此,虽然支持POSIX权限很好,但最终,Cygwin无法复制文件并保持正常的Windows权限。这使得它对我来说毫无用处。使用Python或Ruby会更好。

虽然我很愿意被证明是错误的。


4
今天这件事让我很生气,非常失望。通过以下命令解决了问题: getfacl src-file.txt | setfacl -f - dest-file.txt。为什么Cygwin的cp不能像这样为我完成呢?另一个选择可能是将cp别名为等效的rsync命令,类似于这个答案 - Dan
在设置了目标文件的“完全控制”权限后,我成功使用cp命令复制了文件。 - Lorenz Meyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接