【问题标题】:Cleaning up filenames within a directory清理目录中的文件名
【发布时间】:2011-05-05 07:06:21
【问题描述】:

我想运行一个 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 空荡荡的星球 Part1.avi

莎拉·简历险记 S04E07 空荡荡的星球 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)之前被删除,我不确定如何用如此动态的文件替换它。有时后缀前可能只有一个空格,有时没有,因为脚本也会删除双句点。

关于解决问题的任何想法?

感谢您的帮助!

【问题讨论】:

    标签: bash sed awk rename


    【解决方案1】:

    您可能希望将 所有 个句点转换为空格,然后通过管道输入设置扩展名的命令。

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

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

    【讨论】:

    • 谢谢,这对于我想要的目的来说似乎工作得很好。对于特殊情况,我最终在情况发生之前删除了空间,并且效果很好。轻松修复,等等……再次感谢!
    • @Ratty:您可以通过将倒数第二个模式替换为 s/\.\+/ /g 并将最后一个模式替换为 Gingi 的模式来消除 tr
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2010-09-23
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多