How to get full path of a file?
有没有一种简单的方法可以打印
1 | file.txt = /nfs/an/disks/jj/home/dir/file.txt |
江户十一〔一〕号
1 | dir> <command> file.txt |
应该打印
1 | /nfs/an/disks/jj/home/dir/file.txt |
使用RealLink:
1 | readlink -f file.txt |
我想您使用的是Linux。
我在coreutils 8.15中找到了一个名为
1 2 | realpath file.txt /data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt |
根据@styrofoam fly和@arch standton的评论,单是
以下通常是技巧:
1 | echo $(cd $(dirname"$1") && pwd -P)/$(basename"$1") |
我知道有一个更简单的方法,但如果我能找到它…
1 2 | jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))' /home/jcomeau/cat.wav |
1 2 | jcomeau@intrepid:~$ ls $PWD/cat.wav /home/jcomeau/cat.wav |
1 | find $PWD -type f | grep"filename" |
或
1 | find $PWD -type f -name"*filename*" |
如果与文件位于同一目录中:
1 | ls"`pwd`/file.txt" |
将
在Windows中,您可以:
- 按住SHIFT键,右键单击一个文件,您可以选择名为
"Copy as Path" 的文件。这将把文件的完整路径复制到剪贴板。
在Linux中,可以使用以下命令:
realpath yourfile 获取一个文件的完整路径,正如许多人所建议的那样。
我知道这是一个古老的问题,但只是为了补充以下信息:
Linux命令
1 2 | $ which ls /bin/ls |
对此有一些警告;请参阅https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/。
适用于Mac、Linux、*nix:
这将为您提供当前目录中所有文件的带引号的csv:
1 | ls | xargs -I {} echo"$(pwd -P)/{}" | xargs | sed 's/ /","/g' |
它的输出可以很容易地复制到python列表或任何类似的数据结构中。
您可以使用fpn(完整路径名)脚本:
1 2 3 4 5 6 7 8 9 10 | % pwd /Users/adamatan/bins/scripts/fpn % ls LICENSE README.md fpn.py % fpn * /Users/adamatan/bins/scripts/fpn/LICENSE /Users/adamatan/bins/scripts/fpn/README.md /Users/adamatan/bins/scripts/fpn/fpn.py |
1 | echo $(cd $(dirname"$1") && pwd -P)/$(basename"$1") |
这是对@zeremz答案的解释:
对于MacOSX,我替换了操作系统附带的实用程序,并用较新版本的coreutils替换了它们。这允许您访问Mac上的工具,如
自制版本在命令名前面附加了一个"g"(用于GNU工具),因此等价物变成了
有关如何通过自制在Mac OS X上安装coreutils/gnu工具的说明,请参阅StackExchange Arcticle。
注意:对于非mac-unix用户,
在类似的场景中,我将从其他位置启动CShell脚本。为了设置脚本的正确绝对路径,使其仅在指定目录中运行,我使用以下代码:
1 | set script_dir = `pwd`/`dirname $0` |
例如,如果脚本是这样启动的:
在下面提到的mac中,线路工程。不需要添加任何花哨的线条。
1 | > pwd filename |
这对我很管用。它不依赖于文件系统(取决于需要的pro/con),所以速度很快;而且,它应该可以移植到大多数*nix。它确实假定传递的字符串是相对于pwd的,而不是其他目录。
1 2 3 4 5 6 7 8 9 | function abspath () { echo $1 | awk '\ # Root parent directory refs to the PWD for replacement below /^\.\.\// { sub("^","./") } \ # Replace the symbolic PWD refs with the absolute PWD \ /^\.\// { sub("^\.", ENVIRON["PWD"])} \ # Print absolute paths \ /^\// {print} \' } |
您可以使用此功能。如果给定的文件名没有相对路径,则假定该文件名存在于当前工作目录中:
1 | abspath() { old=`pwd`;new=$(dirname"$1");if ["$new" !="." ]; then cd $new; fi;file=`pwd`/$(basename"$1");cd $old;echo $file; } |
用途:
1 2 | $ abspath file.txt /I/am/in/present/dir/file.txt |
使用相对路径:
1 2 | $ abspath ../../some/dir/some-file.txt /I/am/in/some/dir/some-file.txt |
文件名中包含空格:
1 2 | $ abspath"../../some/dir/another file.txt" /I/am/in/some/dir/another file.txt |
这是幼稚的,但我必须使它符合POSIX。需要CD进入文件目录的权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #!/bin/sh if [ ${#} = 0 ]; then echo"Error: 0 args. need 1">&2 exit 1 fi if [ -d ${1} ]; then # Directory base=$( cd ${1}; echo ${PWD##*/} ) dir=$( cd ${1}; echo ${PWD%${base}} ) if [ ${dir} = / ]; then parentPath=${dir} else parentPath=${dir%/} fi if [ -z ${base} ] || [ -z ${parentPath} ]; then if [ -n ${1} ]; then fullPath=$( cd ${1}; echo ${PWD} ) else echo"Error: unsupported scenario 1">&2 exit 1 fi fi elif [ ${1%/*} = ${1} ]; then if [ -f ./${1} ]; then # File in current directory base=$( echo ${1##*/} ) parentPath=$( echo ${PWD} ) else echo"Error: unsupported scenario 2">&2 exit 1 fi elif [ -f ${1} ] && [ -d ${1%/*} ]; then # File in directory base=$( echo ${1##*/} ) parentPath=$( cd ${1%/*}; echo ${PWD} ) else echo"Error: not file or directory">&2 exit 1 fi if [ ${parentPath} = / ]; then fullPath=${fullPath:-${parentPath}${base}} fi fullPath=${fullPath:-${parentPath}/${base}} if [ ! -e ${fullPath} ]; then echo"Error: does not exist">&2 exit 1 fi echo ${fullPath} |
您可以将其保存在"shell.rc"中,也可以直接放在控制台中。
function absolute_path { echo"$PWD/$1"; }
alias ap="absolute_path"
例子:
ap somefile.txt
意志输出
/home/user/somefile.txt
通常:
1 | find `pwd` | grep <filename> |
或者,只针对当前文件夹:
1 | find `pwd` -maxdepth 1 | grep <filename> |
1 | find / -samefile file.txt -print |
将找到与file.txt具有相同inode编号的文件的所有链接
添加
请注意,
1 | find /bin -samefile /bin/gunzip -ls |
意志产出:
1 2 | 12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/uncompress 12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/gunzip |
这对文件和文件夹都有效:
1 2 3 4 | getAbsolutePath(){ [[ -d $1 ]] && { cd"$1"; echo"$(pwd -P)"; } || { cd"$(dirname"$1")" || exit 1; echo"$(pwd -P)/$(basename"$1")"; } } |
我喜欢已经给出的许多答案,但我发现这确实有用,特别是在获取文件完整路径的脚本中,包括以下符号链接和相关引用,如
1 | dirname `readlink -e relative/path/to/file` |
从根路径开始返回EDOCX1的完整路径(24)。这可以在脚本中使用,以便脚本知道它从哪个路径运行,这对于可以位于计算机上任何位置的存储库克隆非常有用。
1 | basePath=`dirname \`readlink -e $0\`` |
然后,我可以在脚本中使用
希望这有帮助,
戴夫
在Mac OSX中,执行以下步骤:
终点站
1 2 | ls"`pwd`/file.txt" echo $(pwd)/file.txt |
这同时适用于Linux和Mac OSX。
1 | echo $(pwd)$/$(ls file.txt) |
另一个Linux实用程序,执行此任务:
1 | fname <file> |
对于Mac OS,如果只想在查找器中获取文件的路径,请控制单击该文件,然后向下滚动到底部的"服务"。您有许多选择,包括"复制路径"和"复制完整路径"。单击其中一个将路径放在剪贴板上。
1 2 3 4 5 6 | fp () { PHYS_DIR=`pwd -P` RESULT=$PHYS_DIR/$1 echo $RESULT | pbcopy echo $RESULT } |
将文本复制到剪贴板并在终端窗口上显示文本。
:)
(我从另一个堆栈溢出应答中复制了一些代码,但无法再找到该应答)
要获取文件的完整路径:
1)按键盘上的以下键,打开包含文件的文件夹中的终端:
ctrl+alt+t
2)然后键入"pwd"(工作目录打印名的首字母缩写):
1 | your@device ~ $ pwd |
全是伙计们!
最简单的方法是
1 | for i in `ls`; do echo"`pwd`/$i"; done |
它对我很管用
创建如下函数(将文件的绝对路径与pwd相呼应,并将文件添加到路径末尾:
1 | abspath() { echo $(pwd"$1")/"$1"; } |
现在您可以找到任何文件路径:
1 | abspath myfile.ext |
除了"readlink-f",另一个常用命令:
1
2
3 $find /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile
/the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile
$
这还提供了控制台上的完整路径和文件名
主题外:这个方法只提供相对链接,而不是绝对链接。
这将为您提供文件的绝对路径:
1 | find / -name file.txt |