![](/img/trans.png)
[英]Bash script to Rename multiple files in subfolder to their folder name
[英]Find part of folder name in bash script
试图找到文件夹结构中的特定部分,但我在bash脚本中使用RegEx时遇到了麻烦 - 而且我不会说流利的RegEx 。 我需要知道我传递给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
陈述中做到这一切吗? 您可以将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!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.