Tråd bedømmelse:
  • 0 Stemmer - 0 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
Løsningsforslag til recursion i Ruby
22-05-2016, 13:09 (Denne besked var sidst ændret: 22-05-2016, 13:10 af iTick.)
#1
Løsningsforslag til recursion i Ruby
Dette er mit løsningsforslag til Januar 2015 - Recursion

Ja, det tog nok lidt overhånd da jeg lavede det. Og rodede videre med det, efter jeg havde løst udfordringen.
recursive.rb:
#!/usr/bin/env ruby

$layer = 0      # Til indryk

# Help
def usage
        puts "Brug: ./recursive.rb <mappe>"
        puts "F.eks. ./recursive.rb /home"
end

# Rekursiv metode
def examine_dir(_entry)
        Dir.chdir(_entry)                                                       # cd
        _return = Dir.pwd                                                       # Gem working dir til efter et rekursivt kald
        Dir.foreach(_entry) do |entity|                         # loop gennem elementer
                next if entity == "." or entity == ".." # Ingen deadlock
                if File.directory? entity                               # Er element et dir?
                        $layer += 1                                                     # Indryk
                        puts "\n#{"\t" * ($layer - 1)}<dir>\tCreated: #{File.ctime(entity).asctime})\t|#{entity}|\t(Layer: #{$layer})"  # Vis dirnavn
                        examine_dir(Dir.pwd + "/" + entity)                             # Rekursivt kald
                        $layer -= 1                                                                             # Tilbageryk
                        Dir.chdir(_return)                                                              # Returner til det dir vi kom fra
                else                                                                                            # Det er en fil
                        puts "#{"\t" * $layer}<File>\t(Size: #{File.size(entity)} Bytes)\t(Modified: #{File.mtime(entity).asctime})\t(Perm: #{File.stat(entity).mode.to_s(8)})\t|#{entity}|\t(iNode: 0x#{File.stat(entity).ino.to_s(16).upcase})\t(Owner: U:#{File.stat(entity).uid}/G:#{File.stat(entity).gid})"            # Vis filnavn med detaljer
                end
        end
end

# Main
if ARGV.size != 1 then                  # Argument eller usage screen
        usage
else
        examine_dir(ARGV[0])            # Start kald til rekursiv funktion
end

Når det køres, ser der således ud:
Citer:root@kalibox:~/code/ruby/ss# ./recursive.rb ./
<File>  (Size: 763 Bytes)       (Modified: Sat Aug  1 03:40:11 2015)    (Perm: 100744)  |bitcoin.rb|    (iNode: 0xB60D1A)       (Owner: U:0/G:0)
<File>  (Size: 1272 Bytes)      (Modified: Fri Jun  5 19:18:28 2015)    (Perm: 100744)  |recursive.rb|  (iNode: 0xB60D1B)       (Owner: U:0/G:0)
<File>  (Size: 207 Bytes)       (Modified: Fri Jun  5 19:18:28 2015)    (Perm: 100744)  |fizzbuzz.rb|   (iNode: 0xB60D1C)       (Owner: U:0/G:0)
root@kalibox:~/code/ruby/ss#

En udfordring er, ikke at ryge i en uendelig lykke på grund af "." og "..".
---
Writing a shellcode decoder stub in assembly is like talking gibberish in such a way that it is still perfectly intelligible. - iTick
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: 1 Gæst(er)