Dolphin 上下文菜单执行命令,如果已复制,cp 将复制选定的文件夹

Dolphin 上下文菜单执行命令,如果已复制,cp 将复制选定的文件夹

所以我正在尝试自动化一些任务,并且正在制作一些海豚服务菜单。

Exec=for file in %f; do new_path=$(echo "$file" | sed "s|^/home/$(whoami)||"); mkdir -p ~/Dropbox/.Home"$(dirname "$new_path")" && cp -pur "$file" ~/Dropbox/.Home"$new_path"; done

上面的代码第一次运行的时候完全可以满足我的要求。但是当我再次尝试复制/更新同一个文件夹时,它只会在目标位置自我复制。

〜/ Dropbox /文件/ SelectedFolder

〜/ Dropbox /文档/选定文件夹/选定文件夹

我也尝试过

Exec=for file in %f; do new_path=$(echo "$file" | sed "s|^/home/$(whoami)||"); mkdir -p ~/Dropbox/.Home"$(dirname "$new_path")" && rsync -r -t -p -o -g -v --delete -s "$file"/ ~/Dropbox/.Home"$new_path"; done

但是 rsync 不适用于“$file”后带有斜杠的文件。

我真正想要实现的只是将选定的文件和文件夹从 dolphin 复制到目标文件夹,并从目标文件夹结构中修剪 /home/user。

- - 编辑: - -

这应该是一个 .desktop 文件,它充当海豚上下文菜单,我单击任何我想要的文件夹或文件,它将被复制到~Dropbox/.Home保留文件夹结构。假设我想复制(cp -pur)/home/user/.local/share/applications/home/user/Dropbox/.Home。新(复制的)文件的文件夹结构将是,/home/user/Dropbox/.Home/home/user/.local/share/applications而我需要的是/home/user/Dropbox/.Home/.local/share/applications。虽然上述代码示例中的“/home/user”修剪有效,以及复制和更新单个文件,但不起作用的是尝试通过再次运行相同的命令(从上下文菜单)来更新目标上已复制的文件夹,这将保持目标文件完好无损并在其中创建同一文件夹的新副本。

第一次复制是这样的

/home/user/Dropbox/.Home/.local/share/applications

尝试再次复制以进行更新将会像这样

/home/user/Dropbox/.Home/.local/share/applications/applications

答案1

经过进一步的研究,添加了if识别所选项目是文件或文件夹,这是没有任何问题的代码

Exec=for file in %f; do if [ -d "$file" ]; then new_path=$(dirname "$file" | sed "s|^$HOME||"); mkdir -p ~/Dropbox/.Home"$new_path" && cp -pur "$file"/ ~/Dropbox/.Home"$new_path"; fi; if [ -f "$file" ]; then new_path=$(dirname "$file" | sed "s|^$HOME||"); mkdir -p ~/Dropbox/.Home"$new_path" && cp -pur "$file" ~/Dropbox/.Home"$new_path"; fi; done

相关内容