Solução automática
Baixei via bittorrent os oito primeiros capítulos de The Big Bang Theory. Demorou quase uma semana porque fiz várias pausas, mas enfim consegui meus oito AVIs. Então, abri a pasta e vi que o nome deles é de The Big Bang Theory 101.avi até The Big Bang Theory 108.avi. Não é um problema, mas não gosto de nomes com espaço.
Solução óbvia? Renomear todos. Como faremos isso? As pessoas normais diriam: entrando no Nautilus, apertando F2 em cima de cada um e escrevendo o novo nome. Porém, o Tiago, num momento bem nerd, resolveu automatizar: basta criar um script em Ruby. Lá fui eu:
tiago@flick:~/The Big Bang Theory$ irb
irb(main):001:0> `ls`.to_a
=> ["The Big Bang Theory 101.avi\n", "The Big Bang Theory 102.avi\n", "The Big Bang Theory 103.avi\n", "The Big Bang Theory 104.avi\n", "The Big Bang Theory 105.avi\n", "The Big Bang Theory 106.avi\n", "The Big Bang Theory 107.avi\n", "The Big Bang Theory 108.avi\n"]
irb(main):002:0> `ls`.to_a.each{|i| i.trim}
NoMethodError: undefined method `trim' for "The Big Bang Theory 101.avi\n":String
from (irb):2
from (irb):2:in `each'
from (irb):2
from :0
irb(main):003:0> `ls`.to_a.each{|i| i.}
Display all 496 possibilities? (y or n)
irb(main):003:0> `ls`.to_a.each{|i| i.strip}
=> ["The Big Bang Theory 101.avi\n", "The Big Bang Theory 102.avi\n", "The Big Bang Theory 103.avi\n", "The Big Bang Theory 104.avi\n", "The Big Bang Theory 105.avi\n", "The Big Bang Theory 106.avi\n", "The Big Bang Theory 107.avi\n", "The Big Bang Theory 108.avi\n"]
irb(main):004:0> `ls`.to_a.each{|i| i.chomp}
=> ["The Big Bang Theory 101.avi\n", "The Big Bang Theory 102.avi\n", "The Big Bang Theory 103.avi\n", "The Big Bang Theory 104.avi\n", "The Big Bang Theory 105.avi\n", "The Big Bang Theory 106.avi\n", "The Big Bang Theory 107.avi\n", "The Big Bang Theory 108.avi\n"]
irb(main):005:0> `ls`.to_a.each{|i| i.chomp!}
=> ["The Big Bang Theory 101.avi", "The Big Bang Theory 102.avi", "The Big Bang Theory 103.avi", "The Big Bang Theory 104.avi", "The Big Bang Theory 105.avi", "The Big Bang Theory 106.avi", "The Big Bang Theory 107.avi", "The Big Bang Theory 108.avi"]
...
irb(main):017:0> `ls`.to_a.each{|i| `mv '#{i.chomp}' #{i.chomp.gsub(/^[^0-9]*/, '').gsub(/^./, 'S01E')}`}
Enfim, renomeados. Devo ter levado quase uns dois minutos, creio que mais do que levaria no Nautilus. Moral da história: nem sempre a solução automática é a mais rápida. Eu sempre tenho essa mania de deixar os problemas mais difíceis do que eles realmente são... Me digam: isso acontece com todos os programadores ou só comigo?
Ah! Agora o lado positivo: quando fui renomear as legendas (no formato The.Big.Bang.Theory.S01E01.HDTV.XviD-XOR.srt), já que eu já tinha esse modelo foi mais fácil; demorei somente cerca de 20s pra adaptá-lo.
Technorati Tags: ruby, nautilus, irb, shell
Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais


Muuuuito boa.
É coisa de programador mesmo dificultar… mas o que pra uns é dificultar, pra outros é uma solução bem flexível.
Exemplo: lá no trabalho um programador fez um dado em PHP (usou uma função ai - e não vetor como eu faria) isso porque o amigo dele não tinha dado pra jogar RPG.
\o/
Ops, não sei se entendi direito o problema, mas o comando abaixo não resolveria o problema?
$ for i in The\ Big\ Bang\ Theory\ 10*; do mv “${i}” ${i// /_}; done
Não, embora com sed você realmente consiga fazer desse tamanho.
Normal isso de dificultar, coisa de programador mesmo.
Num caso bem parecido, uma vez fiz um script tbm para normalizar nomes de epis de anime, mas foi em shell.
Existem muitas pesquisas para tradução automática, já há vários anos.
contudo, é extremamente complexo, pq muitas vezes a tradução literal não funciona e é preciso adicionar inteligência ao software, para que entenda semântica e gramática, contexto e converter para um outro contexto.
É um grande desafio…