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

Dolphin右键菜单服务脚本:解决重复复制文件夹嵌套重复及rsync兼容问题

Dolphin右键菜单服务脚本:解决重复复制文件夹嵌套重复及rsync兼容问题

嘿,我来帮你搞定这个Dolphin右键菜单的同步问题!你想要的核心需求很明确:把选中的文件/文件夹同步到~/Dropbox/.Home目录,自动去掉本地/home/你的用户名路径前缀,同时避免重复操作时出现文件夹嵌套的尴尬情况对吧?

先说说你之前遇到的问题:

  • 用cp -pur的方式,第一次复制完全正常,但第二次再同步同一个文件夹时,cp会把源文件夹整个放到已存在的目标文件夹里,导致出现~/Dropbox/.Home/.local/share/applications/applications这种嵌套结构——这是因为当目标路径已存在时,cp默认会把源对象放到目标目录下,而不是覆盖更新内容。
  • 改用rsync时你加了"$file"/的后缀,虽然能解决文件夹的嵌套问题,但这个写法对文件无效,因为文件后面加斜杠是不符合rsync语法的,自然会出错。

那怎么解决呢?我们只需要给脚本加一个简单的判断:区分当前处理的是文件还是文件夹,然后给rsync用对应的参数就好了。下面是修正后的完整脚本,你可以直接放到你的.desktop服务菜单文件里:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=all/all;
Name=Sync to Dropbox .Home
Exec=for file in %f; do \
    new_path=$(echo "$file" | sed "s|^/home/$(whoami)||"); \
    dest=~/Dropbox/.Home"$new_path"; \
    mkdir -p "$(dirname "$dest")"; \
    if [ -d "$file" ]; then \
        rsync -rptog --update "$file"/ "$dest"; \
    else \
        rsync -ptog --update "$file" "$dest"; \
    fi \
done

我来拆解下这个脚本的关键逻辑:

  1. 路径处理:还是用你原来的sed命令去掉/home/你的用户名前缀,得到相对目标路径new_path。
  2. 目标目录准备:用mkdir -p确保目标路径的父目录都存在,避免报错。
  3. 文件/文件夹判断:
    • 如果当前处理的是文件夹,就用rsync -rptog --update "$file"/ "$dest":这里的/表示只同步文件夹里的内容到目标路径,不会把源文件夹本身放进去;--update参数会只更新目标中比源文件旧的内容,节省时间;-rptog则保留了权限、时间戳、所有者/组等属性,和你原来cp -pur的效果一致。
    • 如果是文件,就去掉-r(递归参数)和源路径后的/,直接同步文件到目标位置。

如果你需要删除目标中已不存在于源的文件,可以在rsync参数里加上--delete;如果不需要这个功能,保持现有参数就好。

这样修改后,不管你是第一次同步还是后续更新,都不会出现文件夹嵌套的问题:同步文件夹时会直接更新目标里的内容,同步文件时也能正常覆盖或更新,完美匹配你的需求!

备注:内容来源于stack exchange,提问作者mioufts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:54:36