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

Regex 在bash脚本中查找文件夹名称的一部分,regex,linux,bash,switch-statement,Regex,Linux,Bash,Switch Statement,试图在文件夹结构中查找特定部分,但在bash脚本中使用RegEx时遇到问题-。我需要知道我传递给bash脚本的文件夹“类型”。根据当前所在的文件夹“类型”,需要运行不同的操作 下面是文件夹结构的示例: /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

试图在文件夹结构中查找特定部分,但在bash脚本中使用RegEx时遇到问题-。我需要知道我传递给bash脚本的文件夹“类型”。根据当前所在的文件夹“类型”,需要运行不同的操作

下面是文件夹结构的示例:

/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,但找不到解决方案:。我不知道在bash里怎么做

我正在尝试在下面的
媒体
中查找文件夹的名称。所以基本上我想创建类似这样的东西(非bash伪代码):


由两部分组成的问题:

  • 如何
    grep
    或使用
    find
    或更好的方法来获取特定的
    currentFolder
  • 我能在一个聪明的
    案例中做这些吗

  • 您可以将
    basename
    dirname
    case
    语句一起使用:

    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

    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