Προς το περιεχόμενο

file progress graph


Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν όσο και να το έψαξα δε βρήκα κάτι.


Έστω ότι έχουμε πχ, 10 φακέλους που ο καθένας περιέχει κώδικες ενός project σε διάφορες φάσεις, project_1, project_testing, κλπ (version management γιοκ τότε...). 


Η ερώτηση λοιπόν είναι η εξής. Υπάρχει κάποιο tool ή script που να σκανάρει όλους τους φακέλους και να δημιουργεί βάσει του file date ένα progress graph για κάθε file ξεχωριστά (πχ, ανάλογα με το commit graph σε git) ; Γραφικά θα ήταν ακόμα καλύτερα αλλά και με text output στο terminal (πχ, όπως το tree) κάνω δουλειά.


Δημοσ.

Βασικά δεν κατάλαβα τι ακριβώς ζητάς

 

Ο κάθε φάκελος είναι ένα (git) repository ή όχι; Γιατί τι μία λες ότι «version management γιοκ» και μετά μιλάς για commits. Επίσης, το file date τι σημασία έχει και κυρίως τι πληροφορία μπορεί να σου δώσει;

 

BTW, ίσως στο thread του προγραμματισμού να πάρεις περισσότερες γνώμες.

Δημοσ.

Όχι δεν είναι git (μακάρι να είχα προνοήσει τότε, γιαυτό και λέω «version management γιοκ»!).

 

Το file date έχει μεγάλη σημασία διότι μου δείχνει πότε έγινε modified το αρχείο (είμαστε σε NTFS!). Άρα αν έχω όπως έγραψα πχ, 10 φακέλους ενός προτζεκτ σε διάφορες φάσεις, με αυτόν τον τρόπο μπορώ να δω την "εξέλιξη" του x source file στο χρόνο και σε ποιο folder ανήκει. Ξέχνα τα commits και το git, απλά ανάφερα το commit graph, ως προς τον τρόπο εμφάνισης καθαρά όχι ως προς την λειτουργία.   

Δημοσ.

Τότε θες κάποια γλώσσα με plot library που θα κάνει walk τα directories, θα βρίσκει το access time των αρχείων, θα τα ταξινομεί και θα κάνει plot τα γραφήματα. Python,perl οι επιλογές σου.

Δημοσ.

Τότε θες κάποια γλώσσα με plot library που θα κάνει walk τα directories, θα βρίσκει το access time των αρχείων, θα τα ταξινομεί και θα κάνει plot τα γραφήματα. Python,perl οι επιλογές σου.

Ναι ΟΚ το γνωρίζω, αλλά δυστυχώς δεν έχω χρόνο για να κάτσω κάνω develop κάτι τέτοιο. Η ερώτηση μου είναι αν υπάρχει κάτι έτοιμο που μπορώ να βρω. 

Δημοσ. (επεξεργασμένο)

Θα συμφωνήσω και εγώ ότι μάλλον μόνο manually μπορείς να το κάνεις αυτό.

 

Σε python3 πχ για το walking και τις ημερομηνίες μπορείς να τα πάρεις κάπως έτσι:

import pathlib
import pprint
 
def get_filepaths(path):
    """ Return a (recursive) list with all the files contained in path """
    for root, dirs, filenames in os.walk(path):
        root = pathlib.Path(root)
        for filename in filenames:
            yield root / filename
 
project_directories = [
    "/path/to/dir1",
    "/path/to/dir2",
]
 
for project_dir in project_directories:
    project_files_ctimes = {path: path.stat().st_ctime for path in get_filepaths(project_dir)}
    pprint.pprint(project_files_ctimes)
    print()

ενώ για τα diffs μπορείς να δεις το difflib

https://pymotw.com/3/difflib/

Επεξ/σία από pmav99
Δημοσ. (επεξεργασμένο)

Thanx, θα το δω, αλλά δυστυχώς δεν έχω χρόνο για να κάτσω να το φτιάξω.

Τα modification times θα μπορούσα να τα πάρω recursively απλά με ls -Rtla

Επεξ/σία από Dr.Fuzzy
Δημοσ.

Στο παρακάτω script μου χτυπάει το find, διότι προφανώς είναι σαν να του δίνω find . -name arg1 arg2 arg3 ενώ δε δέχεται multiple args.

#!/bin/bash
cmp=$(comm -12 <(ls -F $1) <(ls -F $2))
find . -name "$cmp"

Πως μπορώ να περάσω όλο το cmp pipeline στο find;

Δημοσ. (επεξεργασμένο)

Υποθέτω ότι θες να βρεις ποια αρχεία είναι κοινά μεταξύ δύο φακέλων, σωστά;

 

Εμπνεόμενος από εδώ: http://unix.stackexchange.com/a/124896/37579

cd /tmp
mkdir -p proj2/{dir1,dir2}/
touch proj{1,2}/dir{1,2}/source{1,2}
touch proj1/dir1/source3
touch proj2/dir2/source3

# output
$ tree proj*
proj1
├── dir1
│   ├── source1
│   ├── source2
│   └── source3
└── dir2
    ├── source1
    └── source2
proj2
├── dir1
│   ├── source1
│   └── source2
└── dir2
    ├── source1
    ├── source2
    └── source3
comm -12 <(find ./proj1/ -type f -printf '%P\n' | sort) <(find ./proj2/ -type f -printf '%P\n' | sort)

# output
dir1/source1
dir1/source2
dir2/source1
dir2/source2
Επεξ/σία από pmav99
  • Like 1
Δημοσ.

Ωραίος! Ναι και για την ακρίβεια ο τρόπος που πήγα να το κάνω ήταν να βρω αρχικά ποια αρχεία είναι κοινά μεταξύ n ορισμένων φακέλων (comm δουλεύει μια χαρά) και στη συνέχεια find το pipeline του comm για να μου πει σε ποια dirs βρίσκονται (εδώ είχα το πρόβλημα).

Δημοσ.

Έτσι όπως πήγες να το κάνεις ήθελες πολλάπλά '-name filename1 -name filename2 ...'. Ίσως να γίνεται με xargs αυτό (δηλαδή μια κλήση της find για κάθε αρχείο), αλλά νομίζω ότι αυτό που προτείνω είναι καλύτερο γιατί σου επιτρέπει να έχεις κοινά ονόματα αρχείων σε διαφορετικούς φακέλους.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...