在Linux中获取文件的完整路径
Contents
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. 使用basename和dirname命令的组合
当我们想从文件名中去除目录和后缀时, 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