![为什么 Linux 上的 rsync 不保留所有时间戳(创建时间)?](https://linux22.com/image/188561/%E4%B8%BA%E4%BB%80%E4%B9%88%20Linux%20%E4%B8%8A%E7%9A%84%20rsync%20%E4%B8%8D%E4%BF%9D%E7%95%99%E6%89%80%E6%9C%89%E6%97%B6%E9%97%B4%E6%88%B3%EF%BC%88%E5%88%9B%E5%BB%BA%E6%97%B6%E9%97%B4%EF%BC%89%EF%BC%9F.png)
我正在使用当前的 rsync 3.2.3 版本,当我运行stat
命令时,它会显示我的文件的此信息。
stat '/test.txt'
File: /test.txt
Size: 0 Blocks: 0
IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 11949
Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/liveuser) Gid: ( 1000/liveuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2021-02-24 03:17:27.142676494 +0100
Modify: 2021-02-24 03:17:27.142676494 +0100
Change: 2021-02-24 03:17:27.142676494 +0100
Birth: 2021-02-24 03:17:27.142676494 +0100
我想保留访问、修改和出生时间戳。在 rsync 中使用此命令
rsync --atimes --times --crtimes
或者
rsync -UtN
Linux 上不保留问题创建时间 (--crtimes)。它会自动设置为当前传输时间。
如何更改 Linux 上的行为?我想保留复制的文件和文件夹的所有 3 个时间戳。
如果我在 macOS 上做同样的事情,它就可以正常工作。
编辑
在 macOS 10.13 和 macOS 11 上,我只需要安装 homebrew,然后就可以获得最新的 rsync 3.2.3。默认情况下,macOS 集成了非常过时的 rsync 版本 2.6.9。
打开终端
安装自制程序
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
安装rsync
brew install rsync
答案1
Linux
铬时间告诉文件何时在此文件系统中创建。它从来没有意图表明内容可能是在其他地方创建的。
苹果系统
rsync
可以在 MacOS 上“修补”。如果您rsync
使用补丁 fileflags、crtimes、hfs-compression 进行编译,则rsync
可以处理 OS X 元数据并在新文件上保留原始文件的出生时间。注意st_出生时间仅在 64 位 inode 变体中可用。看man 2 stat
。
可能有rsync
针对 Linux 的修补版本。虽然我什么都不知道。
答案2
Linux 上不保留问题创建时间 (--crtimes)。它会自动设置为当前传输时间。
虽然你可以完美地查询 crtime,但不幸的是,Linux 中没有 API 可以设置它:https://linux.die.net/man/2/utimes。
如何更改 Linux 上的行为?我想保留复制的文件和文件夹的所有 3 个时间戳。