Answers:
这将重命名文件。您需要\ w *表示任意数量的字母数字字符。
rename 's/\]\w*//' *
参考:http : //www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
在shell中,可以简单地执行以下操作:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
Shell可以仅使用常规glob生成文件名列表,并
${var%pattern}
从variable的字符串末尾删除(最短)匹配模式var
。由于最后的扩展名始终是.avi
,所以我只用模式将其删除并添加回去。用引号引起来的文件名也应包含空格,例如Fancy Name for a Show.s01e01]Asdf.avi
${x/]*([^.])}
应该执行类似的操作,它会删除括号和任意数量的非点。(尽管如果没有其他括号或点,则失败,因为它没有锁定到字符串的末尾)
${x/]*.avi}
,只添加了一个.avi
像你这样的人。但是我也对名称中的空格如何破译不满意(`find . -name '*]*.avi'`)
。我很高兴提供一个有限的标准unix命令方法,因为重命名不是,但是这让我大吃一惊。
这是种不切实际的做法-其他答案则越来越短-但...
您可以使用PowerShell!微软最近开源了它,并使其跨平台。有关您的操作系统的下载和安装说明,请参阅“获取PowerShell”部分。
安装后,可以使用以下简短脚本:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
基本上,它将遍历当前目录中与文件匹配的每个对象*]*.avi
,将其放在方括号之前,.avi
重新固定在该对象上,并将其分配为新名称。
要直接从Bash运行它,请使用以下半曲线单线:
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
引用此堆栈溢出答案进行转义。
(在Windows上的Ubuntu上的Bash中进行了测试。使用PowerShell进行此操作的方法可能要短得多,但是我想展示一些不懂正则表达式的人可以理解的东西。)
这将搜索模式并使用sed替换文本。
$sed 's/\(.*]\)[a-zA-z0-9].*\(.avi\)/\1\2/' filename
krename
可爱了。它具有各种强大的选项,并在实际执行之前向您显示其操作。您甚至可以使用它来测试以后可以在bash中使用的模式。