提取目录路径和文件名

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

【讨论】:

以上是关于提取目录路径和文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件路径中提取目录路径?

python 从路径目录,文件基名和文件扩展名中分离/提取

如何从文件路径字符串中提取目录?

如何用CMD提取一个文件路径的文件名?并赋值 高分送上

Shell脚本——提取目录名

Shell脚本——提取目录名