通过 Windows 资源管理器上下文菜单调用自定义存档程序

Call custom archive program through Windows Explorer context menue

我在 Windows 上安装了一个 Linux SMB。 Linux SMB 服务器配置为支持 区分大小写的文件名。 Linux SMB 共享包含一些源文件,例如: $ ls dir test.txt Test.txt TesT.txt Windows 文件资源管理器正确处理这些文件。当我通过 Ctr-c 复制它们或移动它们时,它们会按预期处理。

我现在想 归档 来自 Windows 文件资源管理器的一些目录,方法是右键单击并在 上下文菜单。 sourcetree 很大,我不想通过 cmdline 导航。

所以我发现:

因为我习惯了 tar.gz 我更愿意创建 tar.gz beeing。所以我有这些问题:

我使用注册表添加了上下文菜单:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarGz]
@="[> Archive tar.gz "

[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarGz\command]
@="\"C:\cygwin64\bin\mintty.exe\" \"-i\" \"/Cygwin-Terminal.ico\" \"/bin/bash\" \"--login\" \"-i\" \"-c\" \"sh /cygdrive/c/ctxmenue.sh '%1' gz\""

[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarBz2]
@="[> Archive tar.bz2 "

[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarBz2\command]
@="\"C:\cygwin64\bin\mintty.exe\" \"-i\" \"/Cygwin-Terminal.ico\" \"/bin/bash\" \"--login\" \"-i\" \"-c\" \"sh /cygdrive/c/ctxmenue.sh '%1' bz2\""

将上面的内容保存在r.reg中并执行。同时创建 /cygdrive/c/ctxmenue.sh:

#!/bin/sh

f=$(cygpath -u "${1//\/\\}")
d=$(dirname "$f")
b=$(basename "$f")

case  in
    gz)  ( cd "$d"; tar -cvzf "${b}.tar." "${b}" );;
    bz2) ( cd "$d"; tar -cvjf "${b}.tar." "${b}" );;
    *)   ( cd "$d"; tar -cvf "${b}.tar" "${b}" );;
esac