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

如何修改基于mapfile的bash代码为每个文件调用rsync同步到目标路径

两种mapfile代码的rsync同步修改方案

原有代码已经正确通过空分隔的方式把随机选中的文件名读入了fl数组,本身兼容带空格、换行等特殊字符的文件名,不需要修改原有生成文件列表和mapfile读取的逻辑,只需要追加遍历数组执行rsync的代码即可。

第一种(find实现版本)完整代码

# 先按需定义你的变量
dpath="/你的目标同步路径"
nf=10 # 要随机选取的文件数量
inclnm=( -name "*.doc" -o -name "*.pdf" ) # 替换为你实际的find匹配规则

# 原有读取逻辑保持不变
mapfile -d '' fl < <(
  find "$dpath" -maxdepth 1 -type f "${inclnm[@]}" |
  shuf -z -n "$nf"
)

# 新增rsync同步逻辑
for f in "${fl[@]}"; do
  # rsync参数按需调整,需要远程同步就将目标改为 user@ip:远程路径
  rsync -av -- "$f" "$dpath/"
done

第二种(shuf直接传参版本)完整代码

# 先按需定义你的变量
dpath="/你的目标同步路径"
nf=10 # 要随机选取的文件数量
inclnm=( ./* ) # 替换为你实际的待选文件列表

# 原有读取逻辑保持不变
mapfile -d '' fl < <( shuf -z -n "$nf" -e "${inclnm[@]}" )

# 新增rsync同步逻辑
for f in "${fl[@]}"; do
  rsync -av -- "$f" "$dpath/"
done

注意事项

  • 所有变量包裹双引号、rsync参数前加--,是为了兼容以-开头的特殊文件名,避免被识别为命令参数
  • 目标路径末尾的斜杠是rsync的标准写法,保证文件被放到目标目录下,而不是被重命名为目标目录的名字
  • 如果需要同步后删除源文件,可给rsync添加--remove-source-files参数实现移动效果
  • 如果需要静默执行,去掉rsync的-v参数即可

内容的提问来源于stack exchange,提问作者Nigel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:15:02