Regex 在bash脚本中查找文件夹名称的一部分
试图在文件夹结构中查找特定部分,但在bash脚本中使用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
/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