是否有一种简单的方法可以打印file.txt的完整路径?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
<命令>
dir> <command> file.txt
应该打印
/nfs/an/disks/jj/home/dir/file.txt
是否有一种简单的方法可以打印file.txt的完整路径?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
<命令>
dir> <command> file.txt
应该打印
/nfs/an/disks/jj/home/dir/file.txt
当前回答
you@you:~/test$ ls
file
you@you:~/test$ path="`pwd`/`ls`"
you@you:~/test$ echo $path
/home/you/test/file
其他回答
我猜你用的是Linux。
我在coreutils 8.15中找到了一个名为realpath的实用程序。
realpath -s file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt
由于问题是关于如何获取文件的完整/绝对路径,而不是关于如何获取符号链接的目标,请使用-s或——no-symlinks,这意味着不要展开符号链接。
根据@styrofoam-fly和@arch-standton注释,realpath本身并不检查文件是否存在,为了解决这个问题,添加e参数:realpath -e file
you@you:~/test$ ls
file
you@you:~/test$ path="`pwd`/`ls`"
you@you:~/test$ echo $path
/home/you/test/file
您可以使用此功能。如果给出的文件名没有相对路径,则假定它在当前工作目录中:
abspath() { old=`pwd`;new=$(dirname "$1");if [ "$new" != "." ]; then cd $new; fi;file=`pwd`/$(basename "$1");cd $old;echo $file; }
用法:
$ abspath file.txt
/I/am/in/present/dir/file.txt
使用相对路径:
$ abspath ../../some/dir/some-file.txt
/I/am/in/some/dir/some-file.txt
文件名中有空格:
$ abspath "../../some/dir/another file.txt"
/I/am/in/some/dir/another file.txt
你可以把它保存在壳里。Rc或者直接放到控制台
function absolute_path { echo "$PWD/$1"; }
alias ap="absolute_path"
例子:
ap somefile.txt
将输出
/home/user/somefile.txt
这个解决方案使用的命令存在于Ubuntu 22.04上,但通常存在于大多数其他Linux发行版上,除非它们只是为了s'mores而硬核。
在Linux或Mac上获取文件完整路径的最短方法是使用ls命令和PWD环境变量。
<0.o> touch afile
<0.o> pwd
/adir
<0.o> ls $PWD/afile
/adir/afile
你可以用你自己的目录变量d做同样的事情。
<0.o> touch afile
<0.o> d=/adir
<0.o> ls $d/afile
/adir/afile
注意,如果没有标记,ls <FILE>和echo <FILE>是等效的(对于当前目录中的有效文件名称),所以如果你使用echo,如果你愿意,你可以使用ls代替。
如果情况相反,您有完整的路径并想要文件名,只需使用basename命令。
<0.o> touch afile
<0.o> basename $PWD/afile
afile