2014-10-12 109 views
1

试图在文件夹结构中查找特定部分,但在使用RegEx的bash脚本中遇到问题 - furthermore I don't speak RegEx fluently。我需要知道我传递给bash脚本的'type'文件夹。根据当前所在文件夹的“类型”,它需要运行不同的操作。在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我发挥各地,但无法找到一个解决方案: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

您可以使用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 
+0

比想象的容易!作品完美无瑕 – 2014-10-12 13:14:49

1

我同意@falsetru,基本名和目录名都是不错的选择。如果你坚持使用正则表达式,我建议你用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之外的其他语法!

相关问题