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

如何将find输出的绝对路径转换为rsync支持的相对路径

修改方法

你只需要在调用realpath时添加--relative-to参数,指定路径基准为rsync的同步源目录即可,修改后的完整命令如下:

cd /www-data
find ./ -type f -exec sh -c 'if ! lsof "$(readlink -f "$1")" > /dev/null; then realpath --relative-to=./ "$1"; fi' sh {} \; | tr '\n' '\0' | rsync -avz --from0 --files-from=- ./ /data/map/uploads/ --dry-run

关键修改说明

  • 为realpath增加--relative-to=./参数:由于你已经提前执行cd /www-data切换到了rsync的源根目录,该参数会让realpath直接输出所有匹配文件相对于/www-data的相对路径,完全匹配rsync --files-from参数的路径要求。
  • 优化了内联shell的传参写法:将原有的反引号嵌套替换为$()写法,同时给所有变量添加双引号包裹、补全sh -c的$0占位传参,避免文件名包含空格、特殊字符时出现执行错误,兼容性更强。

可选调整

如果你不想提前执行cd切换目录,可以直接将基准路径写为绝对路径,命令可简化为:

find /www-data/ -type f -exec sh -c 'if ! lsof "$(readlink -f "$1")" > /dev/null; then realpath --relative-to=/www-data "$1"; fi' sh {} \; | tr '\n' '\0' | rsync -avz --from0 --files-from=- /www-data/ /data/map/uploads/ --dry-run

执行效果和上面的命令完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:57:21