在Linux下复制文件时,如何保留Windows文件属性?


8

我正在使用在Linux机器上运行的自定义Bash脚本来大量复制FAT32格式的USB驱动器。

我需要保留Windows文件属性,例如“隐藏”。

我使用rsync(或dd与更新版本一起使用findmkdir以强制I / O同步以获得更好的稳定性和最佳带宽使用)。

我盲目尝试-X-A切换为rsync,据说保留了一些文件属性,但它们似乎不适用于Windows文件属性。

在Linux环境中,有什么方法可以读写Windows文件属性?

如果没有更简单的方法,我可以在复制后应用它们。

我不想dd使用整个源文件系统,因为这将无法优化,特别是当您需要编写数百个驱动器时。有时,驱动器的容量为16GB,并且其中只有几个GB的文件,而一个哑巴dd会复制所有16GB的存储空间,这使得它在生产中无法正常工作。

我已经在网上搜索过,但是看起来Linux扩展属性与Windows文件属性无关,并且我还没有找到任何读写信息(或仅将其与文件一起复制)的方法。


“隐藏”是您要保留的唯一对象,还是其他任何一个?
M. Becerra

2
有趣。Linux VFAT驱动程序是否以任何可以写入的方式导出这些属性?
ilkkachu

@ M.Becerra-当前,我只需要“隐藏”属性,将来我可能不需要任何其他属性。
Unfa

@StephenKitt-我需要能够从源文件系统读取该信息,并将该信息传输到新的重复文件系统。我猜想一个非常粗糙的方法可以解决此问题,即对源文件系统进行零填充(以清理空白空间),创建压缩的dd映像,然后将其写入新驱动器,跳过稀疏部分,以避免写出空白部分。图片。这是一个有点暴力破解,我想它不会有一个相当的性能rsync或手动find/ mkdir/ dd操作我现在使用。
Unfa

1
@ilkkachu是的,的确如此,有两个ioctl可用于检索和设置FAT属性。有关fatattr使用这些工具的工具的一种实现,请参见。
Stephen Kitt

Answers:


1

我可以想到几种解决方法。

第一种是使用Mtools复制文件。为此,您需要定义“驱动器”(例如,A:表示源驱动器,B:表示目标驱动器),那么您应该能够使用以下命令复制所有内容,并保留属性和时间戳

mcopy -s -p -m a: b:

(未经测试)。

第二个是使用fatattr(在大多数发行版中都可用)对属性进行后处理。它处理已挂载的文件系统,因此您将以与当前相同的方式复制文件系统,然后用于fatattr列出所有源文件的所有FAT属性,并进行解析以指示fatattr在目标文件上适当地设置属性。


我遇到了问题mcopy,尝试复制“系统卷信息”文件夹时崩溃,引发了“检测到堆栈粉碎” GCC错误。因此,我将尝试使用fatattr
Unfa

您在FAT32文件系统上有“系统卷信息”吗?我以为那只是NTFS的事情。
Stephen Kitt

我得回头看看。
Unfa
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.