【发布时间】:2011-02-01 22:10:42
【问题描述】:
我有一个变量,它具有目录路径以及文件名。我想从 Unix 目录路径中单独提取文件名并将其存储在变量中。
fspec="/exp/home1/abc.txt"
【问题讨论】:
我有一个变量,它具有目录路径以及文件名。我想从 Unix 目录路径中单独提取文件名并将其存储在变量中。
fspec="/exp/home1/abc.txt"
【问题讨论】:
使用basename命令从路径中提取文件名:
[/tmp]$ export fspec=/exp/home1/abc.txt
[/tmp]$ fname=`basename $fspec`
[/tmp]$ echo $fname
abc.txt
【讨论】:
bash 获取文件名
fspec="/exp/home1/abc.txt"
filename="${fspec##*/}" # get filename
dirname="${fspec%/*}" # get directory/path name
其他方式
awk
$ echo $fspec | awk -F"/" '{print $NF}'
abc.txt
sed
$ echo $fspec | sed 's/.*\///'
abc.txt
使用 IFS
$ IFS="/"
$ set -- $fspec
$ eval echo \${${#@}}
abc.txt
【讨论】:
你可以这样做:
base=$(basename "$fspec")
【讨论】:
fpath=$(dirname $fspec)
dirname "/usr/home/theconjuring/music/song.mp3"
将产生
/usr/home/theconjuring/music.
【讨论】:
重击:
fspec="/exp/home1/abc.txt"
fname="${fspec##*/}"
【讨论】:
echo $fspec | tr "/" "\n"|tail -1
【讨论】:
使用 bash “这里的字符串”:
$ fspec="/exp/home1/abc.txt"
$ tr "/" "\n" <<< $fspec | tail -1
abc.txt
$ filename=$(tr "/" "\n" <<< $fspec | tail -1)
$ echo $filename
abc.txt
“这里字符串”的好处是它避免了运行echo 命令的需要/开销。换句话说,“here 字符串”在 shell 内部。那就是:
$ tr <<< $fspec
相对于:
$ echo $fspec | tr
【讨论】: