如何将文件时间从一个目录树同步到另一个目录树

如何将文件时间从一个目录树同步到另一个目录树

我有两个文件树。第一个由原始文件组成。第二个是重复文件,但缺少正确的文件时间戳,它们都设置为上次复制的日期。

是否有一种干净简便的方法可以将文件时间戳从一棵树复制到另一棵树,而无需再次传输文件内容?

补充:两棵树在某些文件中可能略有不同,因为重复是在过去某个时间点生成的。时间戳应在可能时更新。

答案1

您可以尝试:

cd /path/to/old/directory

find . -exec touch "/path/to/new/directory/{}" --reference "{}" \;

touch --reference someotherfile用作为参考来更改文件的日期和时间someotherfile

如果两棵树相同,则 {} 部分将扩展为两棵树中的同一个文件,新目录前缀将完成其余工作。您可以使用echo而不是touch来验证是否正在遍历正确的文件。

当然,这会touch为每个文件执行一个进程。也许 Python 脚本会更高效。

答案2

一个简短的 Python 脚本就可以完成:

#!/usr/bin/python

import os
import sys

for directory,subdirs,files in os.walk('.'):
    pathes=subdirs+files
    for path in pathes:
        fullpath=os.path.join(directory,path)
        target_path=os.path.join(sys.argv[1],fullpath)
        mtime=os.lstat(fullpath).st_mtime
        print 'touching',target_path,':',
        try:
            os.utime(target_path,(mtime,mtime))
            print 'OK'
        except:
            print 'FAILED'

它必须在源目录中运行,并将目标目录作为唯一参数,例如:

python ~/sync_tstamps.py /path/to/target_dir

答案3

尝试使用rsync及其--size-only选项。

rsync -avi --size-only A/ B/

这应该只检查文件的大小并更新时间戳。

相关内容