Make a backup file: Difference between revisions

Content deleted Content added
add Ruby
Line 23:
(with-standard-io-syntax
(print data out)))))</lang>
 
=={{header|Java}}==
{{untested|Java}}
Line 43 ⟶ 44:
}
}</lang>
 
=={{header|Ruby}}==
This version does not overwrite the backup file if it exists.
<lang ruby>def backup_and_open(filename)
filename = File.readlink(filename) if File.symlink?(filename)
bkup = filename + ".backup"
Dir.glob(bkup + "*").reverse.each do |fname|
if m = fname.match(/\.backup\.(\d+)$/)
File.rename(fname, "%s.%d" % [bkup, m[1].to_i + 1])
elsif fname == bkup
File.rename(bkup, bkup + ".1")
end
end
File.rename(filename, bkup)
File.open(filename, "w") {|handle| yield handle}
end
 
backup_and_open(ARGV[0]) {|fh| fh.puts "new text"}
backup_and_open(ARGV[0]) {|fh| fh.puts "some more new text"}</lang>
 
Example:
<pre>$ echo "original" > test.file
$ ruby backup.rb test.file
$ ls -l test.file*
-rw-rw-rw-+ 1 glennj mkgroup-l-d 19 Nov 11 11:19 test.file
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:19 test.file.backup
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:18 test.file.backup.1
$ cat test.file
some more new text
$ cat test.file.backup
new text
$ cat test.file.backup.1
original
$ touch original
$ ln -s original linkfile
$ ruby backup.rb linkfile
$ ls -l linkfile* original*
lrwxrwxrwx 1 glennj mkgroup-l-d 8 Nov 11 11:22 linkfile -> original
-rw-rw-rw-+ 1 glennj mkgroup-l-d 19 Nov 11 11:22 original
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:22 original.backup
-rw-rw-rw-+ 1 glennj mkgroup-l-d 0 Nov 11 11:22 original.backup.1</pre>
 
=={{header|Tcl}}==