In shell, si potrebbe fare semplicemente:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
La shell può produrre un elenco dei nomi dei file con solo un normale glob e ${var%pattern}
rimuove il modello di corrispondenza (più breve) dalla fine della stringa nella variabile var
. Poiché l'estensione finale è sempre .avi
, l'ho appena rimosso con lo schema e l'ho aggiunto di nuovo. Con le virgolette, dovrebbe funzionare anche con nomi di file contenenti spazi, come Fancy Name for a Show.s01e01]Asdf.avi
Questo rinominerà i file. Hai bisogno di \w* per indicare qualsiasi numero di caratteri alfanumerici.
rename 's/\]\w*//' *
Riferimento:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
Questo è assolutamente poco pratico - le altre risposte sono molto più veloci e più brevi - ma...
Puoi usare PowerShell! Microsoft lo ha reso open source di recente e lo ha reso multipiattaforma. Per i download e le istruzioni di installazione per il tuo sistema operativo, consulta la sezione "Ottieni PowerShell".
Una volta installato, puoi usare questo breve script:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
Fondamentalmente, passa attraverso ogni oggetto nella directory corrente che è un file corrispondente a *]*.avi
, ottiene la parte prima della parentesi, aggiunge .avi
torna su di esso e lo assegna come nuovo nome.
Per eseguirlo direttamente da Bash, usa questo one-liner semi-golfed:
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
Citazione in fuga per gentile concessione di questa risposta Stack Overflow.
(Testato in Bash su Ubuntu su Windows. Probabilmente c'è un modo molto più breve per farlo con PowerShell, ma volevo mostrare qualcosa che fosse comprensibile per le persone che non conoscono le espressioni regolari.)