你如何规范Bash中的文件路径?
我想将/foo/bar/..
为/foo
有没有这样做的bash命令?
编辑:在我的实际情况下,目录确实存在。
如果你想从路径中挑选一部分文件名,“dirname”和“basename”是你的朋友,“realpath”也很方便。
dirname /foo/bar/baz
# /foo/bar
basename /foo/bar/baz
# baz
dirname $( dirname /foo/bar/baz ))
# /foo
realpath ../foo
# ../foo: No such file or directory
realpath /tmp/../tmp/../tmp
# /tmp
编辑
实际路径似乎不是标准问题。
与股票标准最接近的是
readlink -f /path/here/..
Realpath似乎来自Debian,并不是coreutils的一部分:http://packages.debian.org/unstable/utils/realpath原本是DWWW软件包的一部分。
(也可在gentoo上以app-admin / realpath的形式获得)
readlink -m /path/there/../../
和。一样
realpath -s /path/here/../../
因为它不需要实际存在的路径来规范化它。
我不知道是否有直接的bash命令来做到这一点,但我通常这样做
normalDir="`cd "${dirToNormalize}";pwd`"
echo "${normalDir}"
它运作良好。
尝试realpath
。 以下内容全部来源,特此捐赠给公共领域。
// realpath.c: display the absolute path to a file or directory.
// Adam Liss, August, 2007
// This program is provided "as-is" to the public domain, without express or
// implied warranty, for any non-profit use, provided this notice is maintained.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libgen.h>
#include <limits.h>
static char *s_pMyName;
void usage(void);
int main(int argc, char *argv[])
{
char
sPath[PATH_MAX];
s_pMyName = strdup(basename(argv[0]));
if (argc < 2)
usage();
printf("%sn", realpath(argv[1], sPath));
return 0;
}
void usage(void)
{
fprintf(stderr, "usage: %s PATHn", s_pMyName);
exit(1);
}
链接地址: http://www.djcxy.com/p/56733.html