如何获得文件的完整path?
有一个简单的方法,我可以打印file.txt
的完整path?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
<command>
dir> <command> file.txt
应该打印
/nfs/an/disks/jj/home/dir/file.txt
使用readlink :
readlink -f file.txt
我想你正在使用Linux。
我在coreutils 8.15中发现了一个名为realpath
的工具。
realpath realpath /data/ail_data/transformed_binaries/coreutils/test_folder_realpath/realpath
以下通常是诀窍:
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
我知道有这样一个更简单的方法,但是如果我能find它,我就不会明白…
jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))' /home/jcomeau/cat.wav
jcomeau@intrepid:~$ ls $PWD/cat.wav /home/jcomeau/cat.wav
find $PWD -type f | grep "filename"
要么
find $PWD -type f -name "*filename*"
你可以使用fpn(完整path名)脚本:
% 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
fpn
不是一个标准的Linux软件包,但它是一个免费和开放的github项目 ,你可以在一分钟内设置它 。
如果您与文件在同一个目录中:
ls "`pwd`/file.txt"
用你的目标文件名replacefile.txt
。
在类似的情况下,我从其他位置启动cshell脚本。 为了设置正确的脚本绝对path,以便它只在指定的目录中运行,我使用下面的代码:
set script_dir = `pwd`/`dirname $0`
$0
存储确切的string如何执行脚本。
例如,如果脚本是这样启动的: $> ../../test/test.csh
$script_dir
将包含/home/abc/sandbox/v1/../../test
对于Mac OS X,我更换了操作系统附带的实用程序,并将其replace为较新版本的coreutils。 这允许您访问readlink -f
(用于文件的绝对path)和realpath
(目录的绝对path)等工具。
Homebrew版本在命令名之前附加了一个“G”(用于GNU工具) – 所以等价物变成了greadlink -f FILE
和grealpath DIRECTORY
。
有关如何在Mac OS X上通过Homebrew安装coreutils / GNU工具的说明可以在这个StackExchange arcticle中find。
注意: readlink -f
和realpath
命令对于非Mac Unix用户来说应该是readlink -f
。
在Windows中,你可以
Hold shift and right click on a file which gives you can option called "Copy as Path"
这会将文件的完整path复制到剪贴板。
在Linux中你可以使用:
realpath yourfile
获取文件的完整path,正如许多人所build议的那样。
你可以将它保存在你的“shell.rc”中,或者放在控制台中
函数absolute_path {echo“$ PWD / $ 1”; }
别名ap =“absolute_path”
例:
ap somefile.txt
会输出
/home/user/somefile.txt
find / -samefile file.txt -print
将find与file.txt具有相同inode号码的文件的所有链接
添加-xdev
标志将避免find
跨越设备边界(“挂载点”)。 (但是,如果find
不是在file.txt
的同一个设备上的某个目录中启动的,那么这可能会导致无法find)
请注意, find
可以为单个文件系统对象报告多个path,因为一个Inode可以被多个目录条目链接,甚至可能使用不同的名称。 例如:
find /bin -samefile /bin/gunzip -ls
会输出:
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
我知道现在这是一个老问题,只是在这里添加信息:
可用于查找命令文件的文件path的Linux命令,即
$ which ls /bin/ls
有一些警告, 请参阅https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ 。
适用于Mac,Linux,* nix:
这会给你一个当前目录中所有文件的引用csv:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
这个输出可以很容易地复制到一个python列表或任何类似的数据结构。
fp () { PHYS_DIR=`pwd -P` RESULT=$PHYS_DIR/$1 echo $RESULT | pbcopy echo $RESULT }
将文本复制到剪贴板,并在terminal窗口上显示文本。
🙂
(我复制了另一个堆栈溢出答案的一些代码,但无法find答案了)
我发现的最简单的方法是
for i in `ls`; do echo "`pwd`/$i"; done
这对我来说很有效
这将适用于文件和文件夹:
getAbsolutePath(){ [[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } || { cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; } }
通常:
find `pwd` | grep <filename>
或者,也可以为当前文件夹:
find `pwd` -maxdepth 1 | grep <filename>
我喜欢许多已经给出的答案,但是我发现这非常有用,特别是在脚本中获得文件的完整path,包括遵循符号链接和相关引用,如.
和..
dirname `readlink -e relative/path/to/file`
这将从根path向前返回file
的完整path。 这可以在脚本中使用,以便脚本知道它从哪个path运行,这对于可以位于机器上的任何位置的存储库克隆来说是有用的。
basePath=`dirname \`readlink -e $0\``
然后,我可以在我的脚本中使用${basePath}
variables直接引用其他脚本。
希望这可以帮助,
戴夫
在Mac OSX中,执行以下步骤:
-
cd
进入目标文件的目录。 - 键入以下terminal命令之一。
终奌站
ls "`pwd`/file.txt" echo $(pwd)/file.txt
- 将
file.txt
replace为您的实际文件名。 - 按Enter键
另一个Linux实用程序,做这个工作:
fname <file>
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
这是@ ZeRemz 答案的解释 :
- 这个脚本获取相对path作为参数
"$1"
- 然后我们得到该path的dirname部分(您可以将dir或文件传递给此脚本):
dirname "$1"
- 然后我们把
cd "$(dirname "$1")
放到这个相对目录中 -
&& pwd -P
并获得它的绝对path。-P
选项将避免所有符号链接 - 之后,我们将基本名称追加到绝对path:
$(basename "$1")
- 作为最后一步,我们
echo
它
对于Mac OS,如果您只想获取查找器中文件的path,请控制单击该文件,然后向下滚动到底部的“服务”。 你有很多select,包括“复制path”和“复制完整path”。 点击其中的一个把剪贴板上的path。
除了“readlink -f”,另一个常用命令:
$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 $
这也给控制台上的完整path和文件名称
题外话:这个方法只是给出相对的链接,而不是绝对的。 readlink -f
命令是正确的。
下面打印出file.txt的绝对path,在这个例子中应该是在当前目录中。
find file.txt
让我们假设file.txt在用户foo的主目录中。 下面的所有命令都是相同的,它们都将在Linux中返回相同的/home/foo/file.txt,或者在OS X中的/Users/foo/file.txt中返回相同的命令:
find ~/file.txt cd ~/ find file.txt find ./file.txt
这适用于Linux和Mac OSX ..
echo $(pwd)$/$(ls file.txt)
这会给你文件的绝对path:
find / -name file.txt