Portál AbcLinuxu, 16. listopadu 2025 02:15
#!/usr/bin/ruby1.9.1
if ARGV[0] == nil
puts "Jako argument zadejte adresar se serialem"
puts "Nazev adresare bude pouzit pri prejmenovani souboru"
exit
else
cesta = ARGV[0]
end
if !(test ?d, "#{cesta}") then #kontrola zda je argument skutecne dostupny adesar
puts "#{cesta} - neni dostupny adresar"
exit
end
list = `ls #{cesta}` #ziskani seznamu souboru v adresari
if cesta =~ /\/$/ #odstraneni / pokud je pritomno
cesta_clon = cesta.chop #pri pouziti cesta.chop! je string freeze
cesta = cesta_clon #zjistit proc
end
if cesta =~ /\/(\S+)$/ #ziskani jmena adresare
adresar = ($1)
end
list.each_line {
|line|
if line =~ /((S|s)\d+(E|e)\d+)/ #zjisteni serie a epizody pokud nazev neobsahuj SXXEYY nic se nedela
epizoda = $1
epizoda.upcase!
line =~ /([^.]+)$/ #pripona souboru
typ = $1
puvodni = cesta+"/"+line #cesta k puvodnimu souboru
puvodni.chomp!
finalni = cesta+"/"+adresar+"_"+epizoda+"."+typ #cesta k novemu souboru
finalni.chomp!
`mv "#{puvodni}" "#{finalni}"` #konecne prejmenovani souboru
end
}
Řešení dotazu:
#!/usr/bin/ruby1.9.1
if ARGV[0] == nil
puts "Jako argument zadejte adresar se serialem"
puts "Nazev adresare bude pouzit pri prejmenovani souboru"
exit
else
cesta = ARGV[0]
end
if !(test ?d, "#{cesta}") then #kontrola zda je argument skutecne dostupny adesar
puts "#{cesta} - neni dostupny adresar"
exit
end
list = `ls #{cesta}` #ziskani seznamu souboru v adresari
if cesta =~ /\/$/ #odstraneni / pokud je pritomno
cesta_clon = cesta.chop #pri pouziti cesta.chop! je string freeze
cesta = cesta_clon #zjistit proc
end
if cesta =~ /([^\/]+)$/ # OPRAVA ziskani jmena adresare
adresar = ($1)
end
list.each_line {
|line|
if line =~ /((S|s)\d+(E|e)\d+)/ #zjisteni serie a epizody pokud nazev neobsahuj SXXEYY nic se nedela
epizoda = $1
epizoda.upcase!
line =~ /([^.]+)$/ #pripona souboru
typ = $1
puvodni = cesta+"/"+line #cesta k puvodnimu souboru
puvodni.chomp!
finalni = cesta+"/"+adresar+"_"+epizoda+"."+typ #cesta k novemu souboru
finalni.chomp!
`mv "#{puvodni}" "#{finalni}"` #konecne prejmenovani souboru
end
}
#!/usr/bin/ruby1.9.1
if ARGV[0] == nil
puts "Jako argument zadejte adresar se serialem"
puts "Nazev adresare bude pouzit pri prejmenovani souboru"
exit
elsif !(File.directory?("#{ARGV[0]}")) then #zjisteni zda je zadany
puts "#{ARGV[0]} - neni dostupny adresar" #argument skutecne adresar
exit
end
Dir.chdir("#{ARGV[0]}") #zmena pracovniho adresare
jmeno_adresare = File.basename("#{ARGV[0]}") #jmeno pracovniho adresare, pouzije se jako cast jmena souboru
Dir.foreach(".") { #prochazeni seznamu souboru v danem adresari
|soubor|
if soubor =~ /((S|s)\d+(E|e)\d+)/ then #zjisteni zda nazev souboru obsahuje SxxEyy
epizoda = $1 #ziskani cisla serie a epizody
epizoda.upcase! #prevod na velka pismena
typ = File.extname("#{soubor}") #ziskani pripony (typu) souboru
novy_soubor = jmeno_adresare+"_"+epizoda+typ #vytvoreni noveho jmena souboru
File.rename("#{soubor}", "#{novy_soubor}") #prejmenovani souboru
puts "#{soubor} >> #{novy_soubor}"
end
}
#!/usr/bin/env ruby1.9.1
#coding=utf-8
require "getoptlong"
adresar = "." #nastavení implicitních hodnot proměných
zaklad_jmena = nil
test = 0
help = "-h, --help napoveda
-d, --drawer jmeno adresare se serialem, bude pouzito jako soucast nazvu souboru
-n, --name jmeno pro prejmenovani, nadrazeno jmenu adresare
-r, --regexp regexp pro vyhledavani serie a epizody
-v, --regexp_version \n\t1 - pro format sAAeBB
\t2 - pro format AAxBB
-t, --test pro zapnuti testovacího modu, soubory se neprejmenovavaji"
regexp = /[S|s](\d+)[E|e](\d+)/
parser = GetoptLong.new #parsovani prikazoveho radku
parser.set_options(
["-h", "--help", GetoptLong::NO_ARGUMENT],
["-d", "--drawer", GetoptLong::OPTIONAL_ARGUMENT],
["-v", "--regexp_version", GetoptLong::OPTIONAL_ARGUMENT],
["-n", "--name", GetoptLong::OPTIONAL_ARGUMENT],
["-r", "--regexp", GetoptLong::OPTIONAL_ARGUMENT],
["-t", "--test", GetoptLong::OPTIONAL_ARGUMENT])
parser.each_option {
|opt, arg|
case opt
when "-h" #kdyz je argument -h
puts help #vypsat help
exit #a skoncit
when "-d"
adresar = arg #prirazeni argumentu adresare
when "-r"
regexp = Regexp.compile("#{arg}") #prirazeni regexpu
when "-v"
case arg
when "1" #nastavení variant -v
regexp = /[S|s](\d+)[E|e](\d+)/
when "2"
regexp = /(\d+)[x|X](\d+)/
end
when "-n" #nastavení základu jména
zaklad_jmena = arg
when "-t"
test = 1
end
}
if !(File.directory?("#{adresar}")) then #zjisteni zda je zadany argument skutecne adresar
puts "#{adresar} - neni dostupny adresar" #kdyz ne tak vypsat info
exit #a konec
end
Dir.chdir("#{adresar}") #zmena pracovniho adresare
puts "Pracovní adresář - "+Dir.pwd() #vypsani adresare
if zaklad_jmena == nil then #když není zadán argument jména
zaklad_jmena = File.basename(Dir.pwd()) #použije se název adresáře
end
puts "Základ jména - "+zaklad_jmena #a vypíše se na výstup
Dir.foreach(".") { #prochazeni seznamu souboru v danem adresari
|soubor|
if soubor =~ regexp then #zjisteni zda nazev souboru obsahuje pozadovany regexp
serie = $1 #ziskani cisla serie a epizody
epizoda = $2
if serie.size < 2 then #když je velikost řetězce menší jak 2
serie = "0"+serie #přidá se před něj 0
end
if epizoda.size < 2 then
epizoda = "0"+epizoda
end
typ = File.extname("#{soubor}") #ziskani pripony (typu) souboru
novy_soubor = zaklad_jmena+"_"+"s"+serie+"e"+epizoda+typ #vytvoreni noveho jmena souboru
if soubor == novy_soubor then #když název původního souboru a nového je stejný
next #přeskočíme na další soubor
end
i = 0
loop do
if File.exist?("#{novy_soubor}") then #když nový název souboru koliduje s již existujícim souborem
i = i + 1
novy_soubor = zaklad_jmena+"_"+"s"+serie+"e"+epizoda+"("+i.to_s+")"+typ #pozměníme ho přidáním (i)
else #jinak
break #pokračujeme dál
end
end
puts "#{soubor} >> #{novy_soubor}"
if test == 0 then #když se netestuje
File.rename("#{soubor}", "#{novy_soubor}") #přejmenovat soubor
else
puts "Testovací provoz - nedochází k přejmenování" #jinak jen vypsat hlášku
end
end
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.