提取目录路径和文件名
Posted
技术标签:
【中文标题】提取目录路径和文件名【英文标题】:Extract directory path and filename 【发布时间】:2011-02-01 22:10:42 【问题描述】:我有一个变量,它具有目录路径以及文件名。我想从 Unix 目录路径中单独提取文件名并将其存储在变量中。
fspec="/exp/home1/abc.txt"
【问题讨论】:
Extract File Basename Without Path and Extension in Bash的可能重复 【参考方案1】:使用basename命令从路径中提取文件名:
[/tmp]$ export fspec=/exp/home1/abc.txt
[/tmp]$ fname=`basename $fspec`
[/tmp]$ echo $fname
abc.txt
【讨论】:
【参考方案2】: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
【讨论】:
【参考方案3】:你可以这样做:
base=$(basename "$fspec")
【讨论】:
而且,如果您也需要路径,请使用 dirname:fpath=$(dirname $fspec)
【参考方案4】:
dirname "/usr/home/theconjuring/music/song.mp3"
将产生
/usr/home/theconjuring/music
.
【讨论】:
【参考方案5】:重击:
fspec="/exp/home1/abc.txt"
fname="$fspec##*/"
【讨论】:
【参考方案6】:echo $fspec | tr "/" "\n"|tail -1
【讨论】:
【参考方案7】:使用 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
【讨论】:
以上是关于提取目录路径和文件名的主要内容,如果未能解决你的问题,请参考以下文章