当源树有挂载点时,如何告诉rsync在文件上保留时间戳


41

关于这个问题

问题的简短描述:

当源树内部有一个挂载点时,即使使用-a选项,复制到目标树时该挂载点内文件的时间戳也不会保留

详细说明:

假设这是源代码树:

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

其中data/上述被安装外部USB硬盘。一切都是ext4文件系统。源代码中的所有内容均归我所有me

BACKUP 也碰巧是挂载点,即备份USB磁盘。

发出此命令后rsync -av --delete /home/me/ /home/BACKUP/,我发现它/home/BACKUP/data/下面的所有内容都具有当前时间戳,就好像这些文件是现在创建的一样,而不是中文件的时间戳/home/me/data/。外面的其他文件和文件夹data确实保留了时间戳。

问题是:如何rsync在上述设置中使用它告诉它在所有文件和文件夹上甚至在挂载点上的文件和文件夹上保留时间戳?

我在用:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30

Answers:


45

来自man rsync

   -t, --times                 preserve modification times

编辑-改进此答案,因为尚不清楚为什么这对OP没有帮助:

OP正在将文件从一个文件系统复制到另一个文件系统并希望保留c-time。大多数人理解c-time的意思是“创建时间”,这在大多数UNIX / Linux系统上是不正确的(Windows文件系统跟踪“创建”或“出生”时间)。

在大多数情况下,在UNIX和Linux,c-time是用来记录的最后一个索引节点“时间戳Ç ”焊割。如果inode的任何属性已更新,则它会更改:

c-time将文件带到新文件系统时,OP无法保留其文件的。在新文件系统中创建这些文件是上面列出的条件之一(创建inode /文件)。

/编辑


9
谢谢。我知道。但请再次仔细阅读问题。我确实使用过-a这样的说法:archive mode; equals -rlptgoD 为此-t已经包括在内。
纳赛尔2013年

1
您是否要保留更改时间?ctime不是为了“创建”它的for(状态)更改
h3rrmiller 2013年

1
我希望它像在未安装的磁盘上的文件上一样工作。即保持与ls -l在文件上看到的相同的时间戳。这适用于不在挂载点内的文件。但是,安装点内的所有文件都带有时间戳,表明它们是刚刚创建的。这次你叫什么。我只是希望它在源文件中使用相同的时间戳。现在没有。我希望所有时间方面都被复制。即制作文件的副本。创建时间,更改时间等...
Nasser

4
更改时间(ctime)随索引节点的更改(即创建/权限更改/移动/等)而更新。因为您正在创建一个新的inode(因为您正在跨文件系统(独立的inode表)复制文件,所以ctime会被更新。en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -l显示的是mtime(修改)而不是ctime
h3rrmiller 2013年

6

正如hr3miller所说,-a(或--archive)等于-rlptgoD,并且已经包含了同步时间。

但是,当rsync将数据复制到例如。在无法保存用户和所有者的NFS / FAT32 / NTFS挂载中,rsync不会尝试设置时间。Rsync将发出类似警告

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

因此,通过使用保留了用户和组

-rlptD

代替

-rlptgoD

仅当不保留所有者和组时才使用此选项。请注意,保留符号链接和其他功能也可能触发该行为。您必须浏览要备份的每个rsync功能(-r -l -p -t -g -o -D)的手册页。


-2

我使用rsync -az并确定它可以节省修改时间。我现在仔细检查了一下。


2
这是因为-a--archive)包含-t
heemayl

但是,不能,ctime不能任意重置。(抱歉,我起初误解了这个问题。)
Mik
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.