Contents

在Linux中获取文件的完整路径

1. 概述

文件和目录是操作系统的构建块。作为 Linux 用户,我们对文件和目录执行各种操作。一种这样的操作是查找文件的完整路径。文件的完整路径也称为绝对路径或规范路径。

在本教程中,我们将讨论查找文件完整路径的各种方法。

2. 设置

让我们创建文件和目录结构以用作示例:

$ cd /tmp
$ mkdir -p dir1/dir2/dir3/dir4/dir5
$ touch dir1/dir2/file2.txt
$ touch dir1/dir2/dir3/dir4/file4.txt
$ touch dir1/dir2/dir3/dir4/dir5/file5.txt
$ tree /tmp/dir1/
/tmp/dir1/
└── dir2
    ├── dir3
    │   └── dir4
    │       ├── dir5
    │       │   └── file5.txt
    │       └── file4.txt
    └── file2.txt
4 directories, 3 files

3. 使用readlink命令

readlink 命令打印规范文件名。我们可以使用该命令的*-f*选项来查找文件的完整路径:

$ cd /tmp/dir1/dir2/dir3/dir4/dir5/
$ readlink -f file5.txt 
/tmp/dir1/dir2/dir3/dir4/dir5/file5.txt

4. 使用realpath命令

或者,我们可以使用realpath 命令来获取文件的绝对路径:

$ cd /tmp/dir1/dir2/dir3/dir4/
$ realpath file4.txt 
/tmp/dir1/dir2/dir3/dir4/file4.txt

5. 使用basenamedirname命令的组合

当我们想从文件名中去除目录和后缀时, basename 命令很有用。同样,我们可以使用dirname 命令从文件名中删除最后一个组件:

$ basename /tmp/dir1/dir2/dir3/dir4/file4.txt
file4.txt
$ dirname /tmp/dir1/dir2/dir3/dir4/file4.txt
/tmp/dir1/dir2/dir3/dir4

我们可以使用这两个命令的组合来查找文件的完整路径。让我们为此创建一个简单的 shell 脚本:

$ cat get_full_path.sh 
#! /bin/bash
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
$ chmod +x get_full_path.sh
$ ./get_full_path.sh file4.txt
/tmp/dir1/dir2/dir3/dir4/file4.txt

首先,我们使用dirname命令查找文件所在的目录。然后我们使用cd 命令更改目录。

接下来,我们使用*pwd * 命令打印当前工作目录。在这里,我们应用了*-P*选项来显示物理位置而不是符号链接。

最后,我们使用basename命令打印没有目录的文件名。

6. 使用find命令

find 命令在目录层次结构中搜索文件。我们可以使用这个命令来打印文件的绝对路径:

$ cd /tmp/dir1/
$ find $PWD -type f -name file4.txt 
/tmp/dir1/dir2/dir3/dir4/file4.txt