[ruby-it] File.basename("xxx", "x*x") l'asterisco funziona?

Antonio Flamini iusimi a libero.it
Sab 27 Mar 2010 11:44:06 CET


Pietro Giorgianni wrote:
> Il 25 marzo 2010 18.02, Antonio Flamini <iusimi a libero.it> ha scritto:
>> Il cat serve per questo, salvare il percorso del nuovo backup in una
>> variabile per poi, con ls #{variabile_con_il_percorso}*.dar, avere una
>> lista dei file di backup.
> 
> Invece del cat puoi fare:
> File.open(nomedelfile, 'w') {|f| f.write percorso }
> Per non usare ls c'� Dir.glob, come hai visto.
> 
>> Ormai � solo una curiosit�: in File.basename("#{var}", ".*.dar")
>> l'asterisco non funzioner� mai?
> 
> Mai dire mai, ma attualmente non funziona e, a meno che qualcuno non
> decida di implementarlo cos�, continuer� a non funzionare anche in
> futuro.
> 
>> Se hai tempo di correggere le linee che mi hai scritto
>> potr� confrontarle con le mie.
> 
> Non mi sembra ci sia niente da correggere...
> 
> 
> pietro

nomi = File.open('elenco') {|f| f.readlines}.map {|x|
> Dir.glob("#{x.strip}/*.dar").map {|y| File.basename(y).gsub 
> /\(.\d+)?\.dar$/, '' }.uniq }.flatten 

Immagino che per 'elenco' tu intenda un file contenente la lista dei 
file di backup, però non è cosi: il file che devo leggere contiene il 
percorso della cartella contenente gli stessi file di backup.
Comunque ho provato le linee che mi hai scritto (due giorni!), però mi 
da un errore di compilazione proprio su gsub; allora ho fatto delle 
modifiche, anche perché da quello che ho letto il pattern andrebbe 
racchiuso tra  "()" e "[]", questo è quello che ne è venuto fuori:

path_file="/home/user/dar_file/file_backup.txt"
var_path=File.read path_file => /media/disk/
darfile_list=Dir.glob("#{var_path}*.dar") => ["data.1.dar", data.2.dar", 
etc]
darfile_list.each do |y| File.basename(y).gsub(/[\(.\d+)?\.dar$]/, "")

Come vedi invece di usare File.open ho usato File.read, e ora so che al 
posto di ls posso usare Dir.glob (grazie!). L'ultima riga, gsub, ora non 
mi da nessun errore però mi restituisce i file di backup non solo con 
l'estensione ma anche con il percorso, mentre che con File.basename 
avevo come risultato il basename e basta.
Avevo pensato che invece di avere una lista infinita di file di bakup 
avrei potuto conformarmi con il tenere solamente un numero limitato di 
file, es. 5, e salvarli in una variabile con:

darfile_list.each do |x|
case x
when "data.1.dar"
var[0]=x
when
etc

o qualcosa del genere. Però credo di averci provato ma senza risultato.
Per cuanto riguarda le linee che mi hai scritto, e anche quelle che ho 
modificato: dove ho sbagliato?

antonio





-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list