You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正find+rsync命令,仅复制archive目录下的指定内容?

问题:rsync迁移文件时如何排除父目录仅复制子内容

目录结构与迁移要求

源目录结构

-var
   -data
      -archive
           -111111
               -logs
                  datetime.log 
               meter.txt
           -222222
               -logs
                  datetime.log 
               meter.txt
           -configurations
               -rules
               config.json
           -recycle

迁移条件

  • 仅复制修改时间≤30天的文件/目录(configurations目录不受此限制,需复制其所有内容);
  • 排除recycle目录;
  • 仅复制archive下的内容,不复制var、data和archive本身。

目标目录结构

-target
     -111111
          -logs
              datetime.log 
           meter.txt
     -222222
          -logs
              datetime.log 
          meter.txt
     -configurations
          -rules
          config.json

当前问题

使用以下命令时,已实现前两个条件,但无法排除var/data/archive目录,导致target下会出现多余的父目录层级:

find var/data/archive ! -path "*/recycle*" \( -path "*/configurations*" -o -name "*"  -mtime -30 \) | rsync -av --inplace --files-from=- . target

修正方案

修正后的命令

find var/data/archive ! -path "*/recycle*" \( -path "*/configurations*" -o -mtime -30 \) -printf "%P\n" | rsync -av --inplace --files-from=- var/data/archive/ target/

关键调整说明

  1. 去掉父目录路径前缀:给find添加-printf "%P\n"参数,让它输出相对于var/data/archive的路径,而非完整路径,这样rsync就不会把var/data/archive层级带到目标目录。
  2. 调整rsync的源目录:将rsync的源从.改为var/data/archive/,确保rsync从正确的起始目录读取要复制的文件/目录。
  3. 移除冗余参数:删掉原命令中多余的-name "*",因为find默认会匹配所有符合条件的文件/目录。

验证效果

  • 所有符合时间条件的111111、222222目录内容会被复制到target下;
  • configurations目录的所有内容不受时间限制,完整复制;
  • recycle目录被排除;
  • target下不会出现var、data、archive这些父目录层级,完全符合目标结构要求。

内容的提问来源于stack exchange,提问作者ima.technophyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:55:16