重命名脚本以在 debian 中调整文件名中的某些模式

0rax

我目前有点卡住了,如果文件夹树中的文件名具有以下一项或两项,则尝试调整文件夹树中的文件名:

  1. 删除'S00' - 'S99' - 那部分将从文件名中删除。s/[sS](0[1-9]|[1-9][0-9])/可以做到我认为

  2. 任何独立的两位数前面都有一个“E”。/\b([0-9]{2})\b/E$1某种方式查找和替换

示例:这些中的任何一个

  • [Lorem ipsum] 胡萝卜 07 [Consetetur] [1080p] .mkv

  • [Lorem ipsum] 胡萝卜 S04 07 [Consetetur] [1080p] .mkv

  • [Lorem ipsum] 胡萝卜 S04 E07 [Consetetur] [1080p] .mkv

改为

  • [Lorem ipsum] 胡萝卜 E07 [Consetetur] [1080p] .mkv

在它们各自的子文件夹中。

最终目标是在文件出现时自动重命名文件的过程(后一点我必须在完成后弄清楚),以便 kodi 抓取工具可以识别剧集

这就是我得到的程度,正如你所看到的,它仍然是一团糟,因为我不久前在这里发现了这个重命名脚本,但我不知道如何正确应用正则表达式,我只是把它打了进去

#!/bin/bash

start_dir="//srv/MEDIA2/"
find "$start_dir" -name '*.*' -type f \
  |sort \
  |while read name; do 
     ((i++))
     mv -i "$name" \
#remove season part
       "$(printf 's/[sS](0[1-9]|[1-9][0-9])/' "$(dirname "$name")" $((i)) "$(basename "$name")")"
#prepend E to free standing double digits
       "$(printf 's/\b([0-9]{2})\b/' "$(dirname "$name")" $((i)) "$(basename "$name")")"
    
done

目前它返回

//home/user/./rnscript.sh: line 14: s/[sS](0[1-9]|[1-9][0-9])/: No such file or directory
//home/user/./rnscript.sh: line 16: s([0-9]{2}/: No such file or directory

如果任何在该领域具有专业知识的人可以帮助我运行此程序,我们将不胜感激。

乔诺

请您尝试以下操作:

#!/bin/bash

shopt -s globstar

start_dir="//srv/MEDIA2/"                       # double // may be meaningless
for name in "$start_dir"/**/*.*; do             # search the directory recursively
    [[ -f $name ]] || continue                  # skip if "$name" is not a file
    newname=$(sed -E 's/[sS](0[1-9]|[1-9][0-9]) +//; s/\b([0-9]{2})\b/E\1/' <<< "$name")
    if [[ "$name" != "$newname" ]]; then        # skip if the filenames are the same
         echo mv -- "$name" "$newname"
    fi
done

echo如果输出看起来不错,则删除
我们不必对文件进行排序,因为$i未使用该变量

[编辑]

如果你想改变S04E02E02为好,请更换newname=上面一行:

newname=$(sed -E 's/[sS](0[1-9]|[1-9][0-9]) *//; s/\b([0-9]{2})\b/E\1/' <<< "$name")

区别只是更改+*,这意味着零个或多个空格。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

构建DOS批处理脚本以重命名文件

批处理脚本以交换单词/重命名文件

使用 bash 脚本,如何连接文本以重命名文件?

Windows脚本以使用参数重命名和移动文件

批处理脚本以使用内容重命名PDF文件

Win Server 2012 PowerShell 4脚本以复制,重命名和触摸文件

需要帮助完成批处理脚本以重命名文件

批处理脚本以批量重命名文件-去除括号和之间的所有字符

批处理脚本以递归方式移动.txt文件并重命名它们以替换特定字符

制作DOS批处理脚本以在文件单词之间重命名

通过使用Shell脚本替换文件名中的特定模式来重命名多个文件

在 PowerShell 中重命名文件名

在PowerShell中重命名脚本

脚本重命名文件名中包含 08 或 09 的文件失败

如何在文件上传脚本中重命名图像文件名?

蝙蝠脚本重命名文件

使用重命名递归替换文件名(而不是目录)中无效字符的脚本

从文件名重命名文件夹 [脚本]

按模式查找和重命名文件在 Debian 中有效,但在 CentOS7 中无效

如何通过移动文件名中的模式来重命名一组文件

重命名bash脚本中的文件

在终端中重命名文件的脚本

重命名bash脚本中的文件

如何从 WinScp 脚本中重命名文件?

使用Shell脚本重命名文件名

如何还原由脚本重命名的文件名

编写bash脚本以调整图像大小,将其移动到另一个文件夹并重命名它们

在bash shell脚本中,如何重命名多个文件,仅保留数字和原始文件名的扩展名?

在Debian软件包安装过程中重命名文件