cp 丢失文件元数据

cp 丢失文件元数据

我有一台在 Linux 上运行的 Asustor NAS;我不知道他们使用什么发行版。

我可以使用 SSH 登录并使用所有 Shell 命令。内部卷使用 ext2,外部 USB HD 使用 NTFS。

当我尝试使用cp命令复制任何文件时,该文件的日期元数据将更改为当前日期时间。

例如,如果我使用 Windows 从 SMB 复制文件,并且该文件是在 2007 年修改的,则新文件将被标记为现在于 2017 年创建,但在 2007 年修改。但是使用 Linuxcp命令,其修改日期也更改为 2017 年。

此修改日期与我非常相关,因为它允许我在 Windows 资源管理器上按修改日期对文件进行排序。如果它被覆盖,我将无法排序,而且它们现在似乎都已创建。我还使用修改日期来了解我何时获得了一些罕见的旧文件。

我可以在命令中使用任何参数cp来保留原始文件元数据吗?

更新:我尝试过cp --preserve=timestamps,但没有成功,它打印了:

cp: unrecognized option '--preserve=timestamps'
BusyBox v1.19.3 (2017-03-22 17:23:49 CST) multi-call binary.

Usage: cp [OPTIONS] SOURCE DEST

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY

        -a      Same as -dpR
        -R,-r   Recurse
        -d,-P   Preserve symlinks (default if -R)
        -L      Follow all symlinks
        -H      Follow symlinks on command line
        -p      Preserve file attributes if possible
        -f      Overwrite
        -i      Prompt before overwrite
        -l,-s   Create (sym)links

如果我尝试只是-p它说cp: can't preserve permissions of '...': Operation not permitted,但据我测试,时间戳被保留。

答案1

如果您man cp阅读复制命令的手册页,您会找到这些-p and --preserve标志。

-p与...一样--preserve=mode,ownership,timestamps

--preserve[=ATTR_LIST]保留指定的属性(默认:mode,ownership,timestamps),如果可能的话附加属性:context, links, xattr,all

这归结为您应该使用cp -p而不是仅仅使用cp.

答案2

我认为有几点值得指出。

您说您不确定正在使用什么发行版,但在更新中您包含了将您的发行版标识为 BusyBox v1.19.3 的输出。看着Asustor NAS 开发者指南确认有问题的操作系统是忙碌盒

@roaima 发布的答案引用该命令的手册页cp。这在一般情况下是有道理的,但在这种情况下可能没有道理。

BusyBox 是一款专为嵌入式设备设计的简约 Linux 操作系统,它的环境与大多数人可能习惯的更流行的 Linux 风格略有不同。特别是,您的 NAS 上可能没有手册页,并且命令的功能、行为和语法可能略有不同。这是 BusyBox 的文档:

cp这是BusyBox 上的命令条目:

cp

cp [OPTIONS] SOURCE DEST

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY

Options:

        -a      Same as -dpR
        -d,-P   Preserve links
        -H,-L   Dereference all symlinks (default)
        -p      Preserve file attributes if possible
        -f      Force overwrite
        -i      Prompt before overwrite
        -R,-r   Recurse
        -l,-s   Create (sym)links

我们可以看到-p选项标志仍然存在,并且具有与通常相同的语义,尽管它缺乏功能更齐全的发行版上可用的更灵活的语法:

--preserve[=ATTR_LIST]

cp这与您尝试使用该标志运行命令时收到的使用消息一致--preserve

由于您说该-p标志不起作用,另一个可以尝试的选择是在没有标志的情况下复制文件-p,然后使用touch命令更新修改时间,例如:

root@busybox:~# cp original_file new_file
root@busybox:~# touch -r original_file new_file

如果这不起作用,那么您可能需要更新您的问题以包含您收到的错误消息。您可能还想更新您的问题,以包括您尝试复制的文件的属性、您尝试将它们复制到的位置、您正在运行的用户、您执行的确切命令正在使用的用户名以及您在运行这些命令时登录的用户。

也就是说,我怀疑您的cp -p命令可能会生成与权限相关的错误,因为您正在跨已安装的卷进行复制,并且文件所有者存在于一个卷上,但不存在于另一个卷上(或类似的内容)。

相关内容