如何用rsync将多层递归目录下的*.psd文件复制到扁平目录
用rsync批量复制多层目录下的PSD文件到单目录
当然有完美适配的rsync方案!刚好能解决你最多7层递归目录下批量提取所有.psd文件到单个目录的需求,甚至还能帮你处理同名文件的冲突问题,下面分两种场景给出具体命令:
基础版:直接复制(同名文件会覆盖)
如果不担心不同目录下的同名PSD文件互相覆盖,用这个最简命令就足够:
rsync -r --include='*.psd' --exclude='*' --max-depth=7 /path/to/your/source/dir/ /path/to/your/target/dir/
参数解释:
-r:递归遍历源目录的所有子目录(配合--max-depth=7限制在7层以内)--include='*.psd':明确指定只包含.psd后缀的文件--exclude='*':排除所有其他类型的文件和目录(注意顺序:必须放在--include之后,rsync的匹配规则是从上到下生效)--max-depth=7:严格限制遍历的目录深度,刚好符合你最多7层的需求- 源目录末尾的
/:必须加上,否则rsync会把源目录本身作为子目录复制到目标目录里,而不是复制源目录内的内容
进阶版:避免同名文件覆盖
如果不同层级的目录下存在同名的.psd文件,直接复制会导致覆盖丢失文件,这时候可以用--transform参数给文件名加上路径前缀(把路径中的/替换成_),比如src/a/b/file.psd会变成a_b_file.psd:
rsync -r --include='*.psd' --exclude='*' --max-depth=7 --transform='s|/|_|g' /path/to/your/source/dir/ /path/to/your/target/dir/
额外实用技巧:
- 先模拟执行:不确定命令效果的话,加上
--dry-run参数做模拟运行,只会输出要复制的文件列表,不会实际操作:rsync -r --dry-run --include='*.psd' --exclude='*' --max-depth=7 /path/to/your/source/dir/ /path/to/your/target/dir/ - 保留文件属性:如果需要保留PSD文件的权限、创建时间等属性,把
-r换成-a(归档模式,包含递归、权限保留、时间戳同步等功能):rsync -a --include='*.psd' --exclude='*' --max-depth=7 /path/to/your/source/dir/ /path/to/your/target/dir/
内容的提问来源于stack exchange,提问作者Charles Mosndup
相关产品推荐
相关产品推荐

