如何将创建日期复制到修改日期 ubuntu 22.04

如何将创建日期复制到修改日期 ubuntu 22.04

我正在使用 ubuntu 22.04 LTS,我想知道是否可以将 ubuntu 上的创建日期复制到修改日期?我想我已经读过,即使标签“创建日期”在 Nautilus 中,ubuntu 上的创建日期实际上也不是创建日期,而是 ctime(更改日期)。这是正确的吗?我如何将更改日期或“创建日期”复制到修改日期中?

谢谢!!

答案1

你是对的……ctime是文件的最后状态(即元数据)改变时间。

然而,在最近的内核中,系统调用的支持statx()添加了...例如,当使用文件查询时stat file,应返回一些扩展文件属性,包括btime该文件的诞生/创建时间(首先检查stat file是否报告了出生时间)... 对 Ubuntu 22.04 的快速检查表明stat确实使用statx()来获取btime... 例如:

$ strace -e statx -v -s 0 stat filename
statx(AT_FDCWD, "filename", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_blksize=4096, stx_attributes=0, stx_nlink=1, stx_uid=1000, stx_gid=1000, stx_mode=S_IFREG|0664, stx_ino=22022834, stx_size=0, stx_blocks=0, stx_attributes_mask=STATX_ATTR_COMPRESSED|STATX_ATTR_IMMUTABLE|STATX_ATTR_APPEND|STATX_ATTR_NODUMP|STATX_ATTR_ENCRYPTED|STATX_ATTR_AUTOMOUNT|STATX_ATTR_MOUNT_ROOT|STATX_ATTR_VERITY|STATX_ATTR_DAX, stx_atime={tv_sec=1679481498, tv_nsec=733858313} /* 2023-03-22T13:38:18.733858313+0300 */, stx_btime={tv_sec=1679481214, tv_nsec=228264332} /* 2023-03-22T13:33:34.228264332+0300 */, stx_ctime={tv_sec=1679481498, tv_nsec=733858313} /* 2023-03-22T13:38:18.733858313+0300 */, stx_mtime={tv_sec=1679481498, tv_nsec=733858313} /* 2023-03-22T13:38:18.733858313+0300 */, stx_rdev_major=0, stx_rdev_minor=0, stx_dev_major=8, stx_dev_minor=2}) = 0
  File: filename
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d  Inode: 22022834    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  ubuntu)   Gid: ( 1000/  ubuntu)
Access: 2023-03-22 13:38:18.733858313 +0300
Modify: 2023-03-22 13:38:18.733858313 +0300
Change: 2023-03-22 13:38:18.733858313 +0300
 Birth: 2023-03-22 13:33:34.228264332 +0300
+++ exited with 0 +++

因此,您应该能够复制文件的创建时间,以如下内容替换其修改时间:

touch -m -d "$(stat -c '%w' file)" file

或者,要替换访问和修改时间,请添加选项-a...touch或删除该-m选项,touch因为它应该默认为两者。

或者,您可以对当前工作目录中的所有文件执行相同的操作,如下所示:

for f in *
  do
    [ -f "$f" ] && touch -m -d "$(stat -c '%w' "$f")" "$f"
  done

相关内容