当前位置:  开发笔记 > 编程语言 > 正文

如何从Bash中的路径字符串中删除文件后缀和路径部分?

如何解决《如何从Bash中的路径字符串中删除文件后缀和路径部分?》经验,为你挑选了6个好方法。

给定一个字符串文件路径/foo/fizzbuzz.bar,如何使用bash只提取fizzbuzz所述字符串的一部分?



1> Zan Lynx..:

以下是使用Bash中的#和%运算符的方法.

$ x="/foo/fizzbuzz.bar"
$ y=${x%.bar}
$ echo ${y##*/}
fizzbuzz

${x%.bar}也可能${x%.*}是删除点${x%%.*}后的所有内容或删除第一个点后的所有内容.

例:

$ x="/foo/fizzbuzz.bar.quux"
$ y=${x%.*}
$ echo $y
/foo/fizzbuzz.bar
$ y=${x%%.*}
$ echo $y
/foo/fizzbuzz

文档可以在Bash手册中找到.查找${parameter%word}${parameter%%word}尾随部分匹配部分.


@Basil:参数扩展.在控制台上键入"man bash",然后键入"/ parameter expansion"
什么叫$ {x%.bar}?我想了解更多相关信息.

2> zigdon..:

看一下basename命令:

NAME=$(basename /foo/fizzbuzz.bar .bar)


可能是所有当前提供的解决方案中最简单的...虽然我使用$(...)而不是反引号.
最简单,但添加一个依赖(不是一个巨大或奇怪的,我承认).它还需要知道后缀.
问题是时间紧迫。在观看bash使用基本名处理将近5分钟来处理800个文件之后,我刚刚在此讨论中搜索了问题。使用上述正则表达式方法,时间减少到大约7秒。尽管这个答案对于程序员来说更容易执行,但是所花费的时间却太多了。想象一下其中有数千个文件的文件夹!我有一些这样的文件夹。

3> 小智..:

纯粹的bash,在两个单独的操作中完成:

    从路径字符串中删除路径:

    path=/foo/bar/bim/baz/file.gif
    
    file=${path##*/}  
    #$file is now 'file.gif'
    

    从路径字符串中删除扩展名:

    base=${file%.*}
    #${base} is now 'file'.
    



4> 小智..:

使用basename我使用以下代码来实现此目的:

for file in *; do
    ext=${file##*.}
    fname=`basename $file $ext`

    # Do things with $fname
done;

这不需要文件扩展名的先验知识,即使你的文件名在其文件名中有点(在它的扩展名前面),也可以工作; 它确实需要程序basename,但这是GNU coreutils的一部分,所以它应该随附任何发行版.


@metrix只需添加"." 在$ ext之前,即:`fname = \`basename $ file.$ ext \``

5> Vinko Vrsalo..:

纯粹的bash方式:

~$ x="/foo/bar/fizzbuzz.bar.quux.zoom"; 
~$ y=${x/\/*\//}; 
~$ echo ${y/.*/}; 
fizzbuzz

在"参数扩展"下的man bash中解释了此功能.非bash方式比比皆是:awk,perl,sed等.

编辑:在文件后缀中使用点,并且不需要知道后缀(扩展名),但不能使用名称本身中的点.



6> Jerub..:

basename和dirname函数就是你所追求的:

mystring=/foo/fizzbuzz.bar
echo basename: $(basename "${mystring}")
echo basename + remove .bar: $(basename "${mystring}" .bar)
echo dirname: $(dirname "${mystring}")

有输出:

basename: fizzbuzz.bar
basename + remove .bar: fizzbuzz
dirname: /foo

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有