Shell 提取目录路径和文件名

Shell 提取目录路径和文件名,shell,unix,Shell,Unix,我有一个变量,它有目录路径和文件名。我想从Unix目录路径中单独提取文件名,并将其存储在变量中 fspec="/exp/home1/abc.txt" 使用命令从路径中提取文件名: [/tmp]$ export fspec=/exp/home1/abc.txt [/tmp]$ fname=`basename $fspec` [/tmp]$ echo $fname abc.txt 您可以简单地执行以下操作: base=$(basename "$fspec") 狂欢节: bash获取文件名

我有一个变量,它有目录路径和文件名。我想从Unix目录路径中单独提取文件名,并将其存储在变量中

fspec="/exp/home1/abc.txt"  
使用命令从路径中提取文件名:

[/tmp]$ export fspec=/exp/home1/abc.txt 
[/tmp]$ fname=`basename $fspec`
[/tmp]$ echo $fname
abc.txt
您可以简单地执行以下操作:

base=$(basename "$fspec")
狂欢节:

bash获取文件名

fspec="/exp/home1/abc.txt" 
filename="${fspec##*/}"  # get filename
dirname="${fspec%/*}" # get directory/path name
其他方式

awk

塞德

使用IFS

$ IFS="/"
$ set -- $fspec
$ eval echo \${${#@}}
abc.txt
dirname”/usr/home/theconjuring/music/song.mp3“
将屈服
/usr/home/theconjuring/music
使用bash“herestring”:

与之相反:

$ echo $fspec | tr

如果您也需要路径,请使用dirname:
fpath=$(dirname$fspec)
$ echo $fspec | sed 's/.*\///'
abc.txt
$ IFS="/"
$ set -- $fspec
$ eval echo \${${#@}}
abc.txt
echo $fspec | tr "/" "\n"|tail -1
$ fspec="/exp/home1/abc.txt" 
$ tr  "/"  "\n"  <<< $fspec | tail -1
abc.txt
$ filename=$(tr  "/"  "\n"  <<< $fspec | tail -1)
$ echo $filename
abc.txt
$ tr <<< $fspec
$ echo $fspec | tr