V prostředí shell by se dalo jednoduše:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
Shell dokáže vytvořit seznam názvů souborů s obyčejným globem a ${var%pattern}
odstraní (nejkratší) odpovídající vzor z konce řetězce v proměnné var
. Protože konečné rozšíření je vždy .avi
, právě jsem jej odstranil se vzorem a přidal zpět. S uvozovkami by to mělo fungovat i s názvy souborů obsahujících mezery, jako je Fancy Name for a Show.s01e01]Asdf.avi
Tím dojde k přejmenování souborů. \w* potřebujete k označení libovolného počtu alfanumerických znaků.
rename 's/\]\w*//' *
Odkaz:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
To je všelijak nepraktické – ostatní odpovědi jsou mnohem rychlejší a kratší – ale...
Můžete použít PowerShell! Microsoft jej nedávno otevřel jako open-source a učinil jej multiplatformním. Pokyny ke stažení a instalaci pro váš operační systém najdete v části „Získat PowerShell“.
Jakmile jej nainstalujete, můžete použít tento krátký skript:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
V podstatě prochází každý objekt v aktuálním adresáři, což je soubor odpovídající *]*.avi
, dostane část před závorku, připne .avi
zpět na něj a přiřadí jej jako nový název.
Chcete-li jej spustit přímo z Bashe, použijte tuto pologolfovou jednovložku:
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
Citace uniklá s laskavým svolením této odpovědi Stack Overflow.
(Testováno v Bash na Ubuntu ve Windows. Pravděpodobně existuje mnohem kratší způsob, jak to udělat s PowerShell, ale chtěl jsem ukázat něco, co je srozumitelné pro lidi, kteří neznají regulární výrazy.)