相对路径 - /home/stevin/data/APP_SERVICE/../datafile.txt
到
绝对路径 - /home/stevin/data/datafile.txt
是否有一个内置的工具Unix如何做到这一点或任何好主意,我怎么能实现这一点。
史蒂夫
相对路径 - /home/stevin/data/APP_SERVICE/../datafile.txt
到
绝对路径 - /home/stevin/data/datafile.txt
是否有一个内置的工具Unix如何做到这一点或任何好主意,我怎么能实现这一点。
史蒂夫
readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt
应该做你要找什么,假设你的Unix/Linux有readlink
。
对不起,我没有readLink。我在Linux 2.6.18-194.el5上 – qwarentine
什么配置? 'readlink'通常是'coreutils'软件包的一部分,通常默认安装。注意它全部是小写的,不是'readLink',而是'readlink' ... – twalberg
像这样的东西可以帮助目录(对于文件,与basename
附加)
echo $(cd ../dir1/dir2/; pwd)
对于文件,
filepath=../dir1/dir2/file3
echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)
+1实际上'echo“$(cd $(dirname $ thingie); pwd)/ $(basename $ thingie)对于文件_and_目录,因为'dirname'和'basename'只是处理字符串,并不关心他们所使用的字符串是否是一个实际的FS对象 –
@TobiasKienzler哦,是的,这实际上是一个错字,直到现在看到,一次同时拥有'../ dir1/dir2/file3'和'$ t'。我会解决这个问题。 :) – SuperSaiyan
由于OP提到甚至没有'readlink',[这里](http://stackoverflow.com/a/20198034/321973)'一个甚至不需要'dirname'和'basename'的解决方案...... –
基于Thrustmaster's answer而是纯粹的庆典:
THING="/home/stevin/data/APP_SERVICE/../datafile.txt"
echo "$(cd ${THING%/*}; pwd)/${THING##*/}"
当然,cd
需要通往通常情况下,这可能并非总是如此 - 在这种情况下,通过编写一个小型Python脚本,您可能会有更简单的生活...
我很惊讶没有人提到realpath
呢。将您的路径传递给realpath
,并将其规范化。
$ ls
Changes
dist.ini
$ ls | xargs realpath
/home/steven/repos/perl-Alt-Module-Path-SHARYANTO/Changes
/home/steven/repos/perl-Alt-Module-Path-SHARYANTO/dist.ini
系统上默认安装了'realpath'吗? –
目前还不清楚“Unix中的内置工具”是什么意思(OP可能意味着内部shell命令)。即使“默认安装”也很模糊,因为操作系统安装程序通常允许用户选择要安装的组件。至于'realpath',它带有Debian/Ubuntu,并且只是一个apt-get/aptitude。但无论如何,OP还会问“任何好的想法”。 –
在我的系统上,我需要添加'-f'选项。 –
也许你可以更新你的问题,以表明你为什么认为你需要这样做。这是一个功能!祝你好运。 – shellter
我将相对路径标记为小文件,然后使用此条目将文件复制到其他位置。但是,APP_SERVICE文件夹有时可能不存在,导致使用此相对路径进行复制失败。 – qwarentine