AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 755588
Accepted
Andreas
Andreas
Asked: 2023-09-03 06:17:39 +0800 CST2023-09-03 06:17:39 +0800 CST 2023-09-03 06:17:39 +0800 CST

为什么使用“cp -a”不能保留创建时间?

  • 772

我复制了一些目录,-a以便preserve=all我理解其中包括创建时间:

cp -a ./* /mnt/destination/

检查目标中的结果目录时,它们的创建时间都设置为当前时间,而它们的内容似乎保留了它们的创作时间。

为什么不是创建日期顶层目录保留吗?

源是 HFS+,目标是 btrfs。


目的地和来源的目录列表摘录:

$ ls -hal --time=creation
total 16K
drwxrwxr-x 1 andreas andreas   74 sep  2 23:25  .
drwx------ 1 andreas andreas  310 apr 26 17:08  ..
drwx------ 1 andreas andreas 2,3K sep  2 23:45  Library

$ ls -hal --time=creation /mnt/source
total 8,1M
drwxrwxr-x  1 andreas andreas   15 mar 28  2022  .
drwxr-x---+ 3 root    root    4,0K aug  9  2022  ..
drwx------  1 andreas andreas   95 apr 15  2019  Library

更新

从答案和评论来看,我得出的结论是,当我检查子目录的日期时,我一定犯了一个错误。我做到了。我的错——我对结果的期望蒙蔽了我的视线。问题的这一部分已被删除。

filesystems
  • 2 2 个回答
  • 593 Views

2 个回答

  • Voted
  1. Best Answer
    user10489
    2023-09-03T07:00:26+08:002023-09-03T07:00:26+08:00

    传统的unix文件系统没有创建时间,只有ctime。ctime 是更改时间,而不是创建时间。更改时间无法通过操作系统调用设置,除非将其更改为当前时间。更改权限或更改 atime 或 mtime 会将 ctime 设置为当前时间。

    话虽如此,似乎尽管创建时间不是 POSIX 的一部分,但许多文件系统似乎都添加了它,请参阅Linux 上的哪些文件系统存储创建时间?

    但是,即使对于支持它的文件系统,它也不是标准化的,因此不能保证 POSIX 工具中对创建时间的支持,并且即使在支持它的文件系统上,也可能无法设置它。如果您看到它有时设置,有时设置不正确,或者设置不一致,则可能涉及多个具有不同支持的工具,或者这些工具仅提供部分支持。

    Linux特定statx函数调用支持atime、btime、ctime和mtime,其中btime标记为创建时间。然而,这只是读取时间。(请注意,各种文件系统以各种方式引用创建时间,包括出生时间、btime、crtime 和 otime。)

    深入挖掘,gnu coreutils cp 通过函数调用记录设置时间utimensat,该函数声称符合 POSIX-1.2008。这个调用只支持修改atime和mtime,但是研究了一下,我无法确定这是因为POSIX只支持atime和mtime(ctime不可设置),还是因为ctime和btime基本上都是不可变的,仅允许更改操作系统,在适当的事件中将它们设置为当前时间。

    • 10
  2. Stéphane Chazelas
    2023-09-03T16:55:46+08:002023-09-03T16:55:46+08:00

    utime()唯一可以设置为任意值(使用、utimes()、utimensat()、futimens()系统调用)的时间戳是上次修改时间(又名 mtime)和上次访问时间(又名 atime)。

    支持的更改状态时间又名 ctime 和出生/创建时间(btime/crtime) 无法伪造(任意设置),因此cp -a,像任何其他软件一样,无法创建出生时间与其对应时间不同的文件被创建。

    执行ln foo barinplacecp foo bar或使用-lGNU 选项cp将导致bar与 具有相同的时间戳(包括创建时间)foo,但请注意,在这种情况下,foo和bar是同一文件(具有两个不同的名称)。

    • 4

相关问题

  • 我应该在 NAS 的 SD 卡中使用哪个文件系统?

  • 如何提前知道 .zip 内部是否有父目录

  • Virtualbox 动态分配磁盘 *.vdi 不断增长

  • du/df 和 ls 报告不同的磁盘使用情况

  • Linux 内核开发人员如何处理数百万行代码的工作?他们是一种方法吗?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve