我已经使用 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