Guest User

Untitled

a guest
May 26th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.81 KB | None | 0 0
  1. #!/bin/env ruby
  2. #
  3. # This does something similar as
  4. #
  5. # $ find <path> -type f -print0 | xargs -0 md5sum | sort | uniq --all-repeated=separate -w32
  6. #
  7. # but dumps a collection of ln command lines to execute.
  8.  
  9. require 'md5'
  10.  
  11. def checksums(dir)
  12. files = Dir[File.join(dir, "**", "*")].select {|name| !File.symlink?(name) && File.file?(name) }
  13. files.map {|fname| [fname, MD5.new(File.open(fname, "rb").read).to_s] }
  14. end
  15.  
  16. def merger(*checksums)
  17. checksums.inject({}) do |all_checksums,file_checksums|
  18. file_checksums.each do |fname,sum|
  19. all_checksums.merge!({ sum => [fname] }) {|k,o,n| o | n }
  20. end
  21. all_checksums
  22. end
  23. end
  24.  
  25. def hardlinker(merged_checksums)
  26. merged_checksums.each do |sum,files|
  27. next if files.count < 2
  28. src = files.shift
  29. files.each {|dst| puts "ln -fn '#{src}' '#{dst}'" }
  30. end
  31. end
Add Comment
Please, Sign In to add comment