尝试在文件夹结构中查找特定部分,但我在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
}
两部分问题:
grep
或使用find
或更好的内容来获取特定currentFolder
?case
声明中完成所有这些吗?答案 0 :(得分:2)
您可以将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
答案 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!