Rsync:如果校验和相同,则保持目标文件不变
Rsync: Keep destination file unchanged if same checksum
假设我们有以下文件:
~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 07:58 harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml
两个文件的内容相同:
~/Homepage $ cmp harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml; echo $?
0
因此,我希望harp_netlify/BingSiteAuth.xml
不要因为相同的内容而被更改。然而,使用以下命令,目标端文件的时间戳得到更新:
~/Homepage $ rsync -cav --delete harp_output/ harp_netlify/
结果是这样的:
~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai <b>08:10</b> harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml
但是,我想要这个:
~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai <b>07:58</b> harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml
但是,如果校验和不同,rsync 必须更新时间戳。
您传递给 rsync
的参数是 -cav
;您遇到的问题是 "a",如 man page 中所述,它扩展为 -rlptgoD
,给您留下传递给 rsync 的最终 -crlptgoDv
参数列表。
其中棘手的部分是 p
、t
、g
和 o
,它们保留权限 (p)、修改时间 (t) (这是导致当前示例中同步更改的原因)、组 (g) 和所有者 (o)。如果我没看错你的问题,你想要的是:
rsync -crlDv --delete harp_output/ harp_netlify/
在此我们保留您当前命令中的 "c" 和 "v",并使用 "r"(用于递归同步)、"l" 来保留符号链接, 和 "D" 来保存设备和特殊文件。如果你想要的只是基于校验和递归同步,而不关心链接或特殊文件,那么 "r" 就足够了;即:
rsync -crv --delete harp_output/ harp_netlify/
假设我们有以下文件:
~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 07:58 harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml
两个文件的内容相同:
~/Homepage $ cmp harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml; echo $?
0
因此,我希望harp_netlify/BingSiteAuth.xml
不要因为相同的内容而被更改。然而,使用以下命令,目标端文件的时间戳得到更新:
~/Homepage $ rsync -cav --delete harp_output/ harp_netlify/
结果是这样的:
~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai <b>08:10</b> harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml
但是,我想要这个:
~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai <b>07:58</b> harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml
但是,如果校验和不同,rsync 必须更新时间戳。
您传递给 rsync
的参数是 -cav
;您遇到的问题是 "a",如 man page 中所述,它扩展为 -rlptgoD
,给您留下传递给 rsync 的最终 -crlptgoDv
参数列表。
其中棘手的部分是 p
、t
、g
和 o
,它们保留权限 (p)、修改时间 (t) (这是导致当前示例中同步更改的原因)、组 (g) 和所有者 (o)。如果我没看错你的问题,你想要的是:
rsync -crlDv --delete harp_output/ harp_netlify/
在此我们保留您当前命令中的 "c" 和 "v",并使用 "r"(用于递归同步)、"l" 来保留符号链接, 和 "D" 来保存设备和特殊文件。如果你想要的只是基于校验和递归同步,而不关心链接或特殊文件,那么 "r" 就足够了;即:
rsync -crv --delete harp_output/ harp_netlify/