我正在尝试使用命令行返回文件的绝对路径。我读到有多种方法可以解决这个问题,即realpath
、readpath -f
和locate
命令。
这些都不适合我。如下所示,如果我在主目录中并搜索下面任意数量的目录中的文件,则只会返回当前目录,并在末尾添加该文件。同样,我会在主目录中搜索一个文件,并返回当前目录和该文件。
[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
应该能解决问题