Make a backup file: Difference between revisions

Content deleted Content added
add Ruby
m →‎{{header|Ruby}}: fix the sorting
Line 50: Line 50:
filename = File.readlink(filename) if File.symlink?(filename)
filename = File.readlink(filename) if File.symlink?(filename)
bkup = filename + ".backup"
bkup = filename + ".backup"
Dir.glob(bkup + "*").reverse.each do |fname|
backup_files = Dir.glob(bkup + "*").sort_by do |f|
f.match(/\d+$/)
$&.nil? ? 0 : $&.to_i
end
backup_files.reverse.each do |fname|
if m = fname.match(/\.backup\.(\d+)$/)
if m = fname.match(/\.backup\.(\d+)$/)
File.rename(fname, "%s.%d" % [bkup, m[1].to_i + 1])
File.rename(fname, "%s.%d" % [bkup, m[1].to_i + 1])
Line 61: Line 65:
end
end


backup_and_open(ARGV[0]) {|fh| fh.puts "new text"}
1.upto(12).each {|i| backup(ARGV[0]) {|fh| fh.puts "backup #{i}"}}</lang>
backup_and_open(ARGV[0]) {|fh| fh.puts "some more new text"}</lang>


Example:
Example:
<pre>$ echo "original" > test.file
<pre>$ echo "original" > original
$ 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
$ ln -s original linkfile
$ ruby backup.rb linkfile
$ ruby backup.rb linkfile
$ ls -l linkfile* original*
$ ls -l linkfile* original*
lrwxrwxrwx 1 glennj mkgroup-l-d 8 Nov 11 11:22 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 10 Nov 11 11:41 original
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:22 original.backup
-rw-rw-rw-+ 1 glennj mkgroup-l-d 10 Nov 11 11:41 original.backup
-rw-rw-rw-+ 1 glennj mkgroup-l-d 0 Nov 11 11:22 original.backup.1</pre>
-rw-rw-rw-+ 1 glennj mkgroup-l-d 10 Nov 11 11:41 original.backup.1
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.10
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:37 original.backup.11
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.2
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.3
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.4
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.5
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.6
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.7
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.8
-rw-rw-rw-+ 1 glennj mkgroup-l-d 9 Nov 11 11:41 original.backup.9
$ cat original original.backup original.backup.1 original.backup.2 original.backup.3 original.backup.4 original.backup.5 original.backup.6 original.backup.7 original.backup.8 original.backup.9 original.backup.10 original.backup.11
backup 12
backup 11
backup 10
backup 9
backup 8
backup 7
backup 6
backup 5
backup 4
backup 3
backup 2
backup 1
original</pre>


=={{header|Tcl}}==
=={{header|Tcl}}==