如何通过SSH区分本地文件系统路径和文件系统路径?

时间:2013-03-15 10:16:37

标签: python regex

在Linux上的Python中,我需要区分本地文件系统路径,一方面是/mnt/data/wherever/%Y-%m-%d.txt~/data/bla.txt,另一方面是SSH“路径”,user@host1:/data/bla.txt或{{1} }}

我怎样才能有效地做到这一点?

编辑:在我的示例中,没有文件user@host2.mydomain.com:blupp.txt,因为/mnt/data/wherever/%Y-%m-%d.txt等仅仅是占位符。因此,检查具有给定名称的文件/目录是否存在将无效。

2 个答案:

答案 0 :(得分:2)

要知道的唯一方法是使用启发式,因为ssh路径也是有效的文件名(虽然非常奇怪)。

来自scp文档:

  

文件名可能包含用户和主机规范以指明这一点   该文件将被复制到该主机或从该主机复制。可以制作本地文件名   显式使用绝对路径名或相对路径名以避免scp处理文件   包含':'作为主机说明符的名称。

因此,检查它们是否以明确的路径开始,或者在正确的位置没有冒号。然后假设它是本地路径,否则假设它是一条远程路径。

示例:

pattern = '(\.?/|/)|(^:?[^:]*$)'
re.match(pattern, ":home/test") # match, is a local path
re.match(pattern, "user@host:blah") # no match

答案 1 :(得分:0)

你可以这样做 -

  1. 首先在本地文件系统中检查路径X(这会考虑像 - user@host1:/data/bla.txt这样的路径。)
  2. 如果路径X在本地文件系统中不存在,则检查SSH路径Y(附加检查“@”和“:”,否则该文件不存在于任何计算机中)。
  3. 使用glob根据模式列出文件。

    >>> import glob
    >>> glob.glob('/mnt/data/wherever/*.txt')   # all txt files within the directory will be listed
    
    如果路径是现有常规文件,则

    os.path.isfile(path)返回True。因此,它用于检查文件是否已存在且不支持通配符。 glob。 要检查路径是否是本地文件系统中的现有文件,请使用: