复制JPG文件时如何保留原目录结构与文件属性
复制JPG文件时如何保留原目录结构与文件属性
嗨,这个需求用rsync来处理简直是完美适配,比你之前用的find+cp要省心太多,它天生就支持保留目录结构和文件属性,而且命令也更简洁。
推荐方案:用rsync实现
直接用这条命令就行:
rsync -av --include='*.JPG' --exclude='*' /path/from/dirA/ /path/to/dirB/
我给你拆解下关键参数的作用:
-a:归档模式,会自动保留文件的权限、时间戳、所有者等所有属性,同时递归处理子目录,完全符合你要保留结构和属性的需求-v:verbose模式,能实时看到复制的文件列表,方便你确认进度或者排查问题--include='*.JPG':明确指定只复制JPG格式的文件--exclude='*':排除所有其他类型的文件,确保只有JPG被复制
如果后续你需要增量复制(比如只同步新增或修改过的JPG),直接重复运行这条命令就行,rsync会自动跳过已经存在且未修改的文件,效率很高。
备选方案:改进find+cp的方式
如果你更习惯用find命令,也可以这样修改来实现需求:
find /path/from/dirA/ -name "*.JPG" -exec sh -c ' # 提取原文件的相对路径,去掉目标目录的前缀 dest_path="/path/to/dirB/${1#/path/from/dirA/}" # 自动创建目标文件所在的目录(如果不存在) mkdir -p "$(dirname "$dest_path")" # 复制文件并保留属性 cp -a "$1" "$dest_path" ' sh {} \;
这里的cp -a和rsync的-a作用类似,会保留文件的所有属性;mkdir -p则确保目标目录结构被自动创建,不会因为目录不存在导致复制失败。
备注:内容来源于stack exchange,提问作者SEU
相关产品推荐
相关产品推荐

