![Dolphin 上下文菜单执行命令,如果已复制,cp 将复制选定的文件夹](https://linux22.com/image/1199051/Dolphin%20%E4%B8%8A%E4%B8%8B%E6%96%87%E8%8F%9C%E5%8D%95%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%B7%B2%E5%A4%8D%E5%88%B6%EF%BC%8Ccp%20%E5%B0%86%E5%A4%8D%E5%88%B6%E9%80%89%E5%AE%9A%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9.png)
所以我正在尝试自动化一些任务,并且正在制作一些海豚服务菜单。
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