使用 Linux 路径语法访问每个驱动器的 Windows“当前目录”

使用 Linux 路径语法访问每个驱动器的 Windows“当前目录”

我在 Windows 系统上,使用cmdshell 并运行 Git for Windows 附带的出色的 Linux 风格命令行工具,例如grepdiff。这些工具要求文件和目录参数使用 Linux 路径语法,而根本不理解 Windows 路径语法。

在 Windows 中cmd,每个驱动器号都有自己的当前目录。在此示例中,我们假设驱动器 C 上的当前目录是C:\foo,驱动器 D 上的当前目录是D:\bar。假设我的当前驱动器是 C:

C:\foo>_

现在假设我想针对当前驱动器以外的驱动器的当前目录

使用能够理解 Windows 语法的命令行程序,例如find,我可以说:

C:\foo>find "something" d:somefile

并且缺少反斜杠表示这somefile是相对于驱动器 D 上的当前目录,即D:\bar\somefile

如何使用需要 Linux 语法的工具(例如,grep在 Windows 版 Git 下)执行此操作?我知道如何指定绝对路径:

C:\foo>grep <something> /d/bar/somefile

但假设我(或我的批处理文件)不知道绝对路径,或者它太长而我不想输入它。/d/bar/somefile指定驱动器号D但不指定目录的绝对路径的相对推论是什么bar

如果命令类似于diff对两个不同驱动器各自的“当前目录”上的两个文件进行操作,则这尤其重要,因此“仅更改当前驱动器”并不能解决问题。

我很抱歉这个问题太长了,但我想确保这个场景得到了很好的解释。我无法使用 Google 或其他搜索引擎在任何地方找到这个。

答案1

Unix 路径语法不允许引用给定驱动器的当前目录,因为 Unix 没有驱动器的概念。所有路径都存在于一个从 开始的层次结构中,/任何类型的所有磁盘都安装在这个层次结构的某个位置。在给定的操作系统上,这些路径的安装位置当然有约定俗成的规定,但 Unix 系统本质上并不要求它们位于任何特定位置。通常在 Unix 上,相同类型的数据始终位于不同机器上的文件系统中的相同位置,即使这些机器选择将这些数据存储在不同的物理驱动器组中。

Unix 系统确实有当前目录的概念,写法为.(一个点),父目录则写法为..(两个点)。请注意“the”的用法:每个进程只有一个当前目录,而不是每个驱动器一个。您可以引用相对于当前目录的文件,例如./foo/bar/baz,或相对于父目录的文件,例如../../foo

如果问题是目录太长且不方便使用,您可以尝试使用符号链接,并且您会经常这样做,但在 Windows 上,这需要提升权限或开发人员模式。除此之外,如果您想引用另一个驱动器的当前目录,则必须指定绝对路径或相对路径。

相关内容