Linux系统中获取路径的文件名的方法

发布网友 发布时间:2022-04-20 12:40

我来回答

1个回答

热心网友 时间:2022-04-12 00:18

  这篇文章主要介绍了Linux系统中获取路径的文件名的方法,文中总结出了两条,需要的朋友可以参考下
  代码如下:
  [root@dabu.info
]#basename
/root/aaa/bbb/dabu.txt
  显示:
  代码如下:
  dabu.txt
#获取路径的文件名
  shell脚本中如何获得脚本文件所在路径?
  方法一:
  代码如下:
  [root@dabu.info
]#DIR=$(cd
"$(dirname
"$0")";
pwd)
[root@dabu.info
]#echo
$DIR
  但是像这种dirname
"$0"这种写法,在遇到source命令时会得到错误的结果。
  方法二:
  代码如下:
  [root@dabu.info
]#echo
"$(
cd
"$(
dirname
"${BASH_SOURCE[0]}"
)"
&&
pwd
)"
  上面一行命令可以获得脚本的绝对轮径,无论你在何处调用这个脚本。
  但是如果含有软链接,就无法使用了。所以,我们为了能正确解析指向脚本的软链接,可以使用下面的多行命令:
  代码如下:
  SOURCE="${BASH_SOURCE[0]}"
  while
[
-h
"$SOURCE"
];
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
  DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
  SOURCE="$(readlink
"$SOURCE")"
  [[
$SOURCE
!=
/*
]]
&&
SOURCE="$DIR/$SOURCE"
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
  done
  DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
  也可与source,bash
-c命令使用
  但是,如果你在脚本中使用先cd切换到其他目录,在运行时上面的命令片段时,则上面的命令不能等到正确的结果。可以参考关于$CDPATH
陷阱的文章。想理解它如何其作用的,可以运行下面的代码:
  代码如下:
  #!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
  while
[
-h
"$SOURCE"
];
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
  TARGET="$(readlink
"$SOURCE")"
  if
[[
$SOURCE
==
/*
]];
then
  echo
"SOURCE
'$SOURCE'
is
an
absolute
symlink
to
'$TARGET'"
  SOURCE="$TARGET"
  else
  DIR="$(
dirname
"$SOURCE"
)"
  echo
"SOURCE
'$SOURCE'
is
a
relative
symlink
to
'$TARGET'
(relative
to
'$DIR')"
  SOURCE="$DIR/$TARGET"
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
  fi
  done
  echo
"SOURCE
is
'$SOURCE'"
  RDIR="$(
dirname
"$SOURCE"
)"
  DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
  if
[
"$DIR"
!=
"$RDIR"
];
then
  echo
"DIR
'$RDIR'
resolves
to
'$DIR'"
  fi
  echo
"DIR
is
'$DIR'"

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com