解释 realpath 的输出

解释 realpath 的输出

我正在尝试使用命令行返回文件的绝对路径。我读到有多种方法可以解决这个问题,即realpathreadpath -flocate命令。

这些都不适合我。如下所示,如果我在主目录中并搜索下面任意数量的目录中的文件,则只会返回当前目录,并在末尾添加该文件。同样,我会在主目录中搜索一个文件,并返回当前目录和该文件。

[seisemann@localhost ~]$ cd uno
[seisemann@localhost uno]$ ls
dos  first
[seisemann@localhost uno]$ cd dos
[seisemann@localhost dos]$ ls
second
[seisemann@localhost dos]$ cd
[seisemann@localhost ~]$ realpath second
/home/seisemann/second
[seisemann@localhost ~]$ 

我的问题是,为什么会发生这种情况?为什么这些命令没有按预期工作?

编辑:我想知道是否有一个命令可以将路径返回到应该找到的文件(如果存在)。对于某些上下文,当前我正在 python 脚本中打开一个目录,并尝试执行终端命令来获取文件夹内文件的路径。我不想对路径进行硬编码,因为这需要是半可移植的,但我能够找到的命令没有按照我的预期执行。

答案1

如果文件不存在真实路径只是将文件名附加到当前路径。

cd /tmp
touch foo
mkdir empty
cd empty
realpath nothing_here
ln -s /tmp/foo nothing_here
realpath nothing_here

首先它的结果是/tmp/empty/nothing_here文件不存在,在它ln打印之后/tmp/foo

根据手册页,这似乎是正确的:

打印解析后的绝对文件名;除最后一个组件外的所有组件都必须存在

因此,要使用 realpath 找到第二个的真实路径,您应该为其使用一个有效路径。它不会搜索您的文件!

realpath ~/uno/dos/second

应该能解决问题

相关内容