2010-11-04 30 views
1

我想运行一个bash脚本,它递归地清理目录中的每个文件名。例如,我有文件名:清除目录中的文件名

The.Sarah.Jane.Adventures.S04E07.The.Empty.Planet.Part1.WS.PDTV.XviD-BIA [sharethefiles.com] .AVI The.Sarah.Jane .Adventures.S04E08.The.Empty.Planet.Part2.WS.PDTV.XviD-BIA [sharethefiles.com] .AVI

我想将文件转换为:

萨拉·珍妮冒险S04E07的Empty Planet Part1.avi

The Sarah Jane Adventures S04E07 The Empty Planet Part2.avi

所以我有这个sed脚本:

sed -e's/\[sharethefiles\.com\]//g; s/WS//g; s/PDTV//g; s/Xvid-BiA//g; s/XviD-BiA//g; s/\.\.//g; s/\./\ /g;' 

但它带来了问题。这个。 (句点)在后缀(avi)之前被删除,我真的不知道如何用动态文件替换它。有时在后缀之前可能只有一个空格,有时没有空格,因为该脚本也会删除双重句点。

解决问题的任何想法?

感谢您的帮助!

回答

2

您可能希望将所有句点转换为空格,然后将其转换为设置扩展名的命令。

例(忽略您指定的其他特殊情况):

tr '.' ' ' | sed 's/ \([^ ]*\)$/.\1/' 
+0

谢谢,这似乎为我想要的目的,工作不够精细。在特殊情况下,我最终在案件发生前将空间移除,并且工作得很好。轻松修复,等等......再次感谢! – Ratty 2010-11-04 20:36:08

+0

@Ratty:你可以用's /\.\+//g'替换倒数第二个模式,并用Gingi的模式替换上一个模式,从而消除'tr'。 – 2010-11-04 21:56:00

相关问题