名称中带有空格的目录上的 KDE 自定义菜单操作

名称中带有空格的目录上的 KDE 自定义菜单操作

我创建了一个脚本,它使用不同的目录路径来将其中的文件合并到一个目录中。我将通过自定义 Kde-Dolphin 操作菜单执行此脚本,因此我创建了这个 .desktop 文件:

[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KonqPopupMenu/Plugin
MimeType=inode/directory;
Actions=mergeDir
X-KDE-AuthorizeAction=shell_access

[Desktop Action mergeDir]
Name=Merge this directories
Exec=konsole --noclose -e bash -c '/sc/dirs_merge.py -s %F'
Icon=folder-red

不幸的是, %F 不考虑空格的转义字符,因此当我对名称中带有空格的目录使用此操作时会出现问题,因为无法区分目录名称中的空格和作为目录分隔符的空格:

例如:/transit/mergetest/测试空白 2 /transit/mergetest/测试空白 1

有人知道这个问题的解决方案吗?

谢谢。

答案1

占位符%F应该可以很好地处理包含空格的文件名 - 如 freedesktop 文档中所述Exec 键

%FA 文件列表。适用于可以同时打开多个本地文件的应用。每个文件都作为单独的参数传递给可执行程序。

因此,只要你的 python 脚本知道如何正确处理多个参数,你就根本不需要使用 bash shell - 只需将%F参数列表直接传递给你的 python 脚本:

Exec=konsole --noclose -e /sc/dirs_merge.py -s %F

如果你确实需要一个 bash shell,然后将参数作为位置参数传递,并记得引用扩展以$@防止 shell 进行分词:

Exec=konsole --noclose -e bash -c '/sc/dirs_merge.py -s "$@"' bash %F

(第二个bash只是为了填充 shell 的$0参数 - 您可以在那里替换任何字符串)。

相关内容