如何在 Nautilus 中直接使用 Windows 网络链接

如何在 Nautilus 中直接使用 Windows 网络链接

在Linux和Windows机器的混合环境中,有很多通过IM,电子邮件等共享的链接。它们指向相同的位置,但是具有不同的格式。

例如Windows 的链接\\MACHINE\dir1\dir2\file.xyz相当于Linux的smb://MACHINE/dir1/dir2/file.xyz

是否有可能在 Nautilus 或/和 shell 中透明地翻译 Windows 链接?

答案1

如你所说

在 Nautilus 或/和 shell 中?

shell 方式:

  1. 使用awk

    awk -F'\' '{printf "smb:/"; for(i=2;i<=NF;i++){printf "/%s",$i}; printf "\n"}'<<< "\MACHINE\dir1\dir2\file.xyz"
    

    输出:

    smb://MACHINE/dir1/dir2/file.xyz
    
  2. 或者通过 Perl

    perl -pe 'print "smb:/"; s/\\/\//g' <<< "\MACHINE\dir1\dir2\file.xyz"
    

    输出:

    smb://MACHINE/dir1/dir2/file.xyz
    

答案2

更短awk

awk '{gsub(/\\/,"/");print "smb:/" $0}'

示例输出:

$ printf "%s" '\MACHINE\dir1\dir2\file.xyz' | awk '{gsub(/\\/,"/");print "smb:/" $0}'
smb://MACHINE/dir1/dir2/file.xyz

Java

非常原始,请谨慎使用。用法:java translatepath towin[tonix] "/path/to/file"["\path\to\file"]

public class translatepath
{
    public static void main(String[] args)
    {
        System.out.println(args[1]);
        if (args[0].contentEquals("tonix"))
            {
                System.out.println(toNixPath(args[1]));
            }
        else if (args[0].contentEquals("towin"))
            {
                System.out.println(toWinPath(args[1]));
            }
    }

    public static String toNixPath(String path)
    {
        return  path.replace("\\","/");
    }
    public static String toWinPath(String path)
    {
        return path.replace("/","\\");
    }

相关内容