目录中有多个文件超过200我想通过删除该字符以及它出现两次后的其余字符来重命名它。
例子:
该目录中的一个文件是
Akouo - Float-H6hQuio26Ww.mp3
我想要一个 bash 脚本,它可以删除第二个连字符及其后的所有字符(扩展名除外)。
最终结果应该是
Akouo - Float.mp3
答案1
重命名您的示例
Akouo - Float-H6hQuio26Ww.mp3
到
Akouo - Float.mp3
使用
rename 's/-[^-]*\././' Akouo\ -\ Float-H6hQuio26Ww.mp3
如果要使用此架构重命名当前目录中的所有 .mp3 文件,请使用
rename 's/-[^-]*\././' *-*-*.mp3
您可以添加-n
试运行选项。
答案2
如果我们假设全部文件有两个或更多连字符,并且所有文件都是 mp3,重命名(在 python 中)只需几行:
hyps = [i for i in range(len(name)) if name[i] == "-"]
name = name[:hyps[1]]+"mp3"
然而,在我看来,脚本应该(没有明确的信息表明这是不必要的)至少考虑到目录有子目录和/或包含的可能性:
- 隐藏文件
- 没有扩展名的文件
- 具有各种扩展名的文件
- 文件名只有一个、两个以上或没有连字符
以便:
file1-2-3-4-5.txt
a-b-c-d-e
Akouo - Float-H6hQuio26Ww.mp3
变成:
file1-2.txt
a-b
Akouo - Float.mp3
然后脚本就更加详细了:
#!/usr/bin/env python3
import shutil
import os
sourcedir = "/path/to/files"
for root, dirs, files in os.walk(sourcedir):
for name in files:
if name.startswith(".") or name.count("-") < 2:
pass
else:
if name.count(".") == 0:
extension = ""
else:
extension = name[name.rfind("."):]
hyps = [i for i in range(len(name)) if name[i] == "-"]
newname = name[:hyps[1]].strip()+extension
shutil.move(root+"/"+name, root+"/"+newname)
将脚本复制到一个空文件中,设置路径到你的目录并保存为rename.py
。通过以下命令运行它:
python3 /path/to/rename.py