首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批重命名媒体文件

批重命名媒体文件
EN

Unix & Linux用户
提问于 2018-11-30 15:19:09
回答 2查看 358关注 0票数 0

我有一个Enigma2 FreeSat记录器,现在我已经连接到我的Plex媒体服务器上。

Plex可以很好地看到和播放来自Enigma2的文件,但是文件命名没有吸引力。

如何重命名这种格式的文件:

yyyymmdd nnnn - channel - title.*,例如20181128 2100年- BBC One HD -学徒。*

至:

title - dd-mm-yyyy - channel.*例如“学徒”- 28-11-2018 - BBC One HD。*

(以这种方式,我可以每隔几分钟从命令行运行一次)。

我希望确保它只匹配第一种格式的文件,这样它就不会尝试重命名已经重命名的文件。

稍后,我想让它作为一个码头容器运行。

EN

回答 2

Unix & Linux用户

发布于 2018-11-30 17:13:05

您可以将此作为起点:

代码语言:javascript
复制
#!/bin/bash

regexp='^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9] -'
while read l; do
  [[ ! ${l} =~ ${regexp} ]] && continue
  ext=${l##*.}
  yyyymmdd=${l%% *}
  yyyymmdd="${yyyymmdd:6:2}-${yyyymmdd:4:2}-${yyyymmdd:0:4}"
  channel=$(echo ${l} | awk -F- '{print $2}' | sed -e 's!^[[:space:]]*!!' -e 's![[:space:]]*$!!')
  title=$(echo ${l} | awk -F- '{print $NF}' | sed -e 's!^[[:space:]]*!!' -e 's![[:space:]]*$!!')
  title=${title%.*}
  echo "${title} - ${yyyymmdd} - ${channel}.${ext}"
done

exit 0

这将您的正则表达式设置为"yyyymmdd“,这样它就可以筛选出与此字符串不匹配的任何内容。然后,对于读取的每一行(可以是find(1)、ls(1)等的输出),它会检查该正则表达式是否匹配。如果是这样,则跳到下一行。

下一组变量赋值是获取所需的各种组件。下一个任务是获得文件扩展名。yyyymmdd得到的是年度,月和日。然后,通过使用变量子字符串重新格式化。

由于通道和标题是用破折号分隔的,我认为使用awk(1)来获得适当的字段会更容易。sed将在字符串之前和之后修剪任何空格。最后一个标题是删除文件扩展名。

一旦有了所有变量,就打印出这一行。这可以很容易地用

代码语言:javascript
复制
mv ${l} "${title} - ${yyyymmdd} - ${channel}.${ext}"

来重命名文件。

票数 1
EN

Unix & Linux用户

发布于 2018-11-30 17:48:32

我认为下面的think脚本可以做到这一点。

它将检查原始文件名的日期和时间是否为数字,如果是,则将名称重新排列为首选格式。

否则,该文件将被跳过,因此已经修改的文件将不会被触摸。

将目录更改为文件所在的位置并运行脚本。

代码语言:javascript
复制
#!/bin/bash

re='^[0-9]+

for i in *.*
do
 str="$i"
# echo "${str} -----"
 date=${str:0:8}
 time=${str:9:4}
  if [[ $date =~ $re ]] && [[ $time =~ $re ]]
  then
   channel=${i#*- }
   channel=${channel% -*}
   title=${i##*- }
   ext=${title##*.}
   title=${title%%.*}
   date=${date:6:2}-${date:4:2}-${date:0:4}
   mv -nv "$i" "$title - $date - $channel.$ext"
  fi
done
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/485173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档