Menu Close

如何获取 Linux 中文件的绝对目录?

获取 Linux 中文件的绝对目录涉及确定文件或目录在文件系统中的完整路径。

一)获取文件绝对路径的命令

以下是几种常用的方法来获取文件的绝对路径:

1. 使用 realpath 命令

realpath 命令用于获取文件或目录的绝对路径。它会解析符号链接并输出文件的实际路径。

示例:

realpath filename

如果 filename 是文件名或路径,realpath 将输出该文件的绝对路径。

2. 使用 dirname命令

该命令会打印包含提供路径的目录。

如果我们提供一个目录,dirname 会输出包含该目录的路径。例如,我们可以执行:

dirname /home/example/foo/

结果:

/home/example

请注意,dirname 输出的是绝对目录,因为我们提供了一个绝对路径。如果我们切换到 /home/ 目录并执行 dirname example/foo/dirname 将输出 example。一般来说,如果提供的是相对路径,dirname 将输出相对目录;如果提供的是绝对路径,dirname 将输出绝对目录。

当提供一个文件时,dirname 会输出包含该文件的路径。例如,我们可以执行:

dirname foo/file.txt

结果:

foo

3. 使用 pwd 命令结合其他命令

如果你知道文件的相对路径,并且你在包含该文件的目录中,可以使用 pwd 命令结合其他命令来获得绝对路径。

示例:

cd /path/to/directory
pwd

pwd 会输出当前工作目录的绝对路径。然后,你可以手动将文件名附加到这个路径上。

4. 在脚本中获取绝对路径

在 shell 脚本中,可以使用以下方法获取绝对路径:

示例:

#!/bin/bash
file="filename"
absolute_path=$(realpath "$file")
echo "Absolute path is: $absolute_path"

5. 使用 find 命令

如果你不知道文件的确切位置,可以使用 find 命令来搜索并获取文件的绝对路径。

示例:

find /path/to/search -name filename

这将从指定的目录开始搜索,并输出找到的文件的绝对路径。

6. 使用 readlink 命令

要获取文件的完整路径,我们使用 readlink 命令。readlink 会打印符号链接的绝对路径,但作为副作用,它也会打印相对路径的绝对路径。

例如,假设我们有以下目录结构:

/
└── home/
    └── example/
        ├── foo/
        |   └── file.txt
        └── link -> foo/

我们使用 -f 选项来规范化相对路径或符号链接的路径。因此,如果我们切换到 /home/example/ 目录,我们可以执行以下任意命令:

readlink -f foo/file.txt
readlink -f link/file.txt
readlink -f ./foo/file.txt
readlink -f ../example/foo/file.txt

这些命令将输出:

/home/example/foo/file.txt

对于第一个命令,readlinkfoo/ 的相对路径解析为 /home/example/foo/ 的绝对路径。

在第二个例子中,readlink 将符号链接 link/ 解析为相同的绝对路径。

对于最后两个命令,readlink 将相对路径规范化,并解析为与前面示例相同的绝对路径。

请注意,-f 选项要求提供路径中除最后一个部分(在我们的例子中是 file.txt)之外的所有部分都必须存在。如果路径不存在,则不会返回任何输出。例如,执行 readlink -f bar/file.txt 将不会产生输出,因为 bar/ 目录不存在。

相反,执行 readlink -f foo/other.txt 将返回 /home/example/foo/other.txt,因为除了最后一个部分外,其他部分都存在。

相反,如果我们不关心提供路径中的任何部分是否存在,可以使用 -m 选项。同样,如果我们希望提供路径中的所有部分都存在,可以使用 -e 选项。

二)使用命令结合显示文件的绝对途径

要获取文件的绝对目录,我们可以将 readlinkdirname 命令结合使用。我们可以通过以下两种方式之一来实现。

2.1. 使用 xargs

首先,我们可以使用 xargs 命令,它将输入转换为提供的命令的参数。通过将 readlink 的输出通过管道传递给 xargs,并将 dirname 命令作为参数提供给 xargs,我们可以获得所需的绝对目录:

readlink -f foo/file.txt | xargs dirname

结果

/home/example/foo

2.2 命令替换

类似地,我们可以使用命令替换 — $(command) — 其中一个命令在子壳中执行,并且该命令的输出替代其调用。因此,我们可以执行以下命令:

dirname $(readlink -f foo/file.txt)

结果

/home/example/foo

等效地,我们也可以执行以下命令,输出将保持不变:

dirname `readlink -f foo/file.txt`

请注意,命令替换在 bash 中有效,但在其他 shell 中不一定适用。

通过结合使用这些命令 — 无论是通过 xargs 还是命令替换 — 我们可以获得文件的绝对目录。

结论:

获取文件的绝对路径在 Linux 系统管理和脚本编写中非常有用。无论是使用 realpathreadlinkpwd 还是 find 命令,这些工具都可以帮助你准确地定位文件或目录的绝对路径。

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in 文件

Related Posts