从文件名中的特定位置删除随机字符串

从文件名中的特定位置删除随机字符串

我已经使用 YouTube 从 YouTube 下载了数十个文件youtube-dl。不错的功能,顺便说一句。当我把它们全部搜索完后,我发现有很多以随机数字和不同大小写字母结尾的。喜欢video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi

$ rename -n 's/-.*avi/.avi/i' *.avi– 拿起第一个-并留下video_name_number_of_video_.avi名字给我。

是否有任何选项可以删除这种字母和数字的组合?我将不胜感激任何帮助。而且里面只有13位数字。

补充:有人问我到底想要什么。所以显然我想从文件名中删除这 13 位数字并幸福地度过我的余生。大胆地提出了导致我目标的实际问题。

答案1

我假设这些是 YouTube 视频 ID。您可以使用正则表达式删除它们,例如:

s/-[^-.]{13}\.avi$/.avi/

将其分解为几个部分,我们有:

  • -- 只是一个连字符
  • [^-.]{13}- 正好 13 个既不是连字符也不是句点的字符
  • \.avi- 匹配文件名中的“.avi”
  • $锚点位于字符串末尾(文件名)

答案2

rename -n 's/-[^-]*\.avi$/.avi/i' ./*

其想法是匹配-后跟一系列*非破折号字符 ( ) 的序列 ( [^-]),后跟.avi字符串末尾的 ( $)。将从第一个到最后一个-.*avi匹配。-avi

zsh

autoload zmv # in ~/.zshrc as it's a damn useful command

zmv -n '(#i)(*)(-*)(.avi)' '$1$3'

(#i)用于不区分大小写的通配符。

答案3

这是一种方法。将所有文件名放在一个文本文件中,即 filename.txt:

video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d2.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d3.avi

写一个脚本:

#/bin/bash -

while IFS= read -r line 
do
    mv -- "$line" "${line%-*}.avi"
done < filename.txt

相关内容