繁体   English   中英

在bash脚本中查找文件夹名称的一部分

[英]Find part of folder name in bash script

试图找到文件夹结构中的特定部分,但我在bash脚本中使用RegEx时遇到了麻烦 - 而且我不会说流利的RegEx 我需要知道我传递给bash脚本的文件夹'type'。 根据当前所在的文件夹“类型”,它需要运行不同的操作。

以下示例文件夹结构:

/home/usr/media/series/Great.Series.S01E02.Something
/home/usr/media/movies/Some.Movie.Here
/home/usr/media/music/An Album Here
/home/usr/media/music/Another Album

RegExr我玩过,但找不到解决方案: http ://regexr.com/39mk4。 我不知道如何在bash中这样做。

我正在尝试 media 下面找到该文件夹​​的名称。 所以基本上我想创建这样的东西(非bash伪代码):

$currentFolder = '/home/usr/media/series/Great.Series.S01E02.Something'
//magic, the following would need to be series|movies|music depending on the input path
$currentFolder = 'series'
switch ($currentFolder) {
  case 'series':
    //something
   case 'movies':
    //something else
   case 'music':
    //more
}

两部分问题:

  1. 我如何grep或使用find或更好的东西来获取特定的currentFolder
  2. 我可以在智能case陈述中做到这一切吗?

您可以将basenamedirnamecase语句一起使用:

currentFolder='/home/usr/media/series/Great.Series.S01E02.Something'
currentFolder=$(basename $(dirname $currentFolder))
case $currentFolder in
    series)
        # Do something
        ;;
    movies)
        # Do something else
        ;;
    music)
        # another
        ;;
    *)
        ;;
esac

我同意@falsetru,basename和dirname都是不错的选择。 如果你坚持使用正则表达式,我建议你努力与sed一段时间。 它很复杂,但一旦学会了,你就可以用它做出惊人的事情。 这是一个变种:

currentFolder='/home/usr/media/series/Great.Series.S01E02.Something'
dn=`dirname $currentFolder | sed 's/\/home\/usr\/media\///'`
case $dn in
    'series') echo "Boring TV";;
    'movies') echo "Who has time?";;
    'music')  echo "Well, Pink Floyd is ok!";;
esac

但要小心你如何放置空间! 并且在赋值时在变量名前面不使用$。 Bash有另一种语法,而不是Java,C或Python!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM