在 Linux 中获取绝对文件路径
您可以使用 pwd 命令获取目录的完整路径:
pwd
但是如何在 Linux 中获取文件的绝对路径?
有几种方法可以打印文件的完整路径:
- 阅读链接
- 真实路径
- 寻找
- 结合 ls 和 pwd
让我逐一向您展示这些命令。但在此之前,我建议先复习一下绝对路径和相对路径概念的基础知识。
使用 readlink 获取文件路径
该命令的目的readlink
是解析符号链接。你可以使用它来显示文件的完整路径,如下所示:
readlink -f filename
以下是一个例子:
abhishek@LHB:~$ readlink -f sample.txt
/home/abhishek/sample.txt
abhishek@LHB:
使用 realpath 获取完整文件路径
该realpath
命令用于解析绝对文件名。除其他用途外,它还可以显示文件的完整路径。
realpath filename
看一下这个例子:
abhishek@LHB:~$ realpath sample.txt
/home/abhishek/sample.txt
abhishek@LHB:~$
如果将其与符号链接一起使用,它将显示原始文件的真实路径。您可以强制它不遵循符号链接:
realpath -s filename
这是一个例子,它默认显示源文件的完整路径,然后我强制它显示符号链接,而不是原始文件。
abhishek@LHB:~$ realpath linking-park
/home/abhishek/Documents/ubuntu-commands.md
abhishek@LHB:~$ realpath -s linking-park
使用find命令获取文件绝对路径
这是 find 命令的要点。所有内容都与您为其提供的搜索位置的目录相关。
如果您输入 .,它将显示相对路径。如果您输入目录的绝对路径,您将获得正在搜索的文件的绝对路径。
使用find 命令进行命令替换,如下所示:
find $(pwd) -name filename
您可以运行它来查找单个文件的完整路径:
abhishek@LHB:~$ find $(pwd) -name sample.txt
/home/abhishek/sample.txt
或者,你可以将它与一组符合特定模式的文件一起使用:
abhishek@LHB:~/Documents/eBooks$ find $(pwd) -name "*.pdf"
/home/abhishek/Documents/eBooks/think-like-a-programmer.pdf
/home/abhishek/Documents/eBooks/linux-guide.pdf
/home/abhishek/Documents/eBooks/absolute-open-bsd.pdf
/home/abhishek/Documents/eBooks/theory-of-fun-for-game-design.pdf
/home/abhishek/Documents/eBooks/Ubuntu 1804 english.pdf
/home/abhishek/Documents/eBooks/computer_science_distilled_v1.4.pdf
/home/abhishek/Documents/eBooks/the-art-of-debugging-with-gdb-and-eclipse.pdf
使用 ls 命令打印完整路径
现在这个有点棘手和混乱。
您可以将环境变量 PWD 与 ls 命令一起使用,如下所示,以显示文件和目录及其绝对路径:
ls -ld $PWD/*
你会得到如下输出:
abhishek@LHB:~/test$ ls -ld $PWD/*
-r--rw-r-- 1 abhishek abhishek 0 Jul 27 16:57 /home/abhishek/test/file2.txt
drwxrwxr-x 2 abhishek abhishek 4096 Aug 22 16:58 /home/abhishek/test/new
但是,要使用 ls 命令打印文件的完整路径,您必须像这样使用它:
ls -l $PWD/filename
虽然不是最干净的解决方案,但它确实有效。
abhishek@LHB:~$ ls -l $PWD/sample.txt
-rw-r--r-- 1 abhishek abhishek 12813 Sep 7 11:50 /home/abhishek/sample.txt
abhishek@LHB:~$
结论
我展示了在 Linux 中获取完整文件路径的四种不同方法。 find 和 ls 命令很常见,而 realpath 和 readlink 则不为许多 Linux 用户所知。学习新东西总是好的,不是吗?