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

时间:2014-10-12 12:57:22

标签: regex linux bash switch-statement

尝试在文件夹结构中查找特定部分,但我在bash脚本中使用RegEx时遇到问题 - furthermore I don't speak RegEx fluently。我需要知道什么文件夹'键入'我传递给了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声明中完成所有这些吗?

2 个答案:

答案 0 :(得分:2)

您可以将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

答案 1 :(得分:1)

我同意@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!