hashedassets είναι ένα εργαλείο γραμμής εντολών που αντιγράφει αρχεία στα ονόματα των αρχείων με βάση το περιεχόμενό τους & nbsp?. Γράφει, επίσης, ένα χάρτη του τι μετονομάστηκε σε ό, τι, ώστε να μπορείτε να βρείτε τα αρχεία σας.
Κύριος σκοπός αυτού είναι ότι μπορείτε να προσθέσετε ένα μακρινό μέλλον Λήγει κεφαλίδα στις συσκευές σας. Χρησιμοποιώντας hash με βάση τα ονόματα των αρχείων είναι πολύ καλύτερα από ό, τι χρησιμοποιώντας $ VCS αριθμός αναθεώρησης σας, επειδή οι χρήστες πρέπει μόνο να κατεβάσετε τα αρχεία που δεν αλλάζουν.
Δημιουργία κάποια αρχεία πηγή
Πρώτον, δημιουργούμε ένα αρχείο για να κατακερματίζεται:
>>> Σύστημα ("input mkdir /")
>>> Σύστημα ("εισόδου mkdir / subdir /")
>>> Σύστημα ("mkdir χάρτες /")
>>> Με ανοικτό ("input / foo.txt", "W") ως αρχείο:
... File.write ("foo")
>>> Με ανοικτό ("input / subdir / bar.txt", "W") ως αρχείο:
... File.write ("bar")
>>> Σύστημα («αγγίξει -t200504072213.12 εισόδου / foo.txt»)
Απλή χρήση
>>> Σύστημα ("hashedassets χάρτες / map.txt εισόδου / *. Txt είσοδος / έξοδος * txt / *. /")
«εξόδου» mkdir
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Εκτυπώσετε ανοιχτή («χάρτες / map.txt»). Read ()
subdir / bar.txt: Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
foo.txt: C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt
>>> Σύστημα ("εξόδου ls /")
C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
>>> Σύστημα ("ls χάρτες /")
map.txt
Το επίπεδο καταγραφής
Αν πείτε την εντολή να είναι ήσυχο, δεν εκτυπώνει τι κάνει:
>>> Σύστημα ("hashedassets -q εισόδου χάρτες / map2.txt / *. Txt εισόδου / * / εξόδου txt *. /")
Αν λέμε η εντολή να είναι πιο λεπτομερές, καταγράφει περισσότερες πληροφορίες:
>>> Σύστημα ("hashedassets -vvv εισόδου χάρτες / map3.txt / *. Txt εισόδου / * / εξόδου txt *. /")
Επίπεδο Debug οριστεί σε 10
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
Τροποποίηση του χρόνου Διατηρείται επίσης:
>>> Old_stat = os.stat ("input / foo.txt")
>>> New_stat = os.stat ("εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt")
>>> [(Getattr (old_stat, στήριγμα) == getattr (new_stat, στήριγμα))
... Για prop σε («st_mtime», «st_atime», «st_ino ')]
[True, True, False]
Μπορούμε εύκολα να κάνετε αυτό με πολλές μορφές:
Το JavaScript
>>> Σύστημα ("hashedassets -Ν my_callback χάρτες / map.js εισόδου / *. Txt εισόδου / * / * εξόδου txt. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Print ανοιχτή («χάρτες / map.js»). Read ()
var my_callback = {
& Nbsp? "Foo.txt": "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt»,
& Nbsp? "Subdir / bar.txt": "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt"
}?
JSON
>>> Σύστημα ("hashedassets -Ν my_callback χάρτες / εισόδου map.json / *. Txt είσοδος / έξοδος * txt / *. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Εκτυπώσετε ανοιχτή («χάρτες / map.json»). Read ()
{
& Nbsp? "Foo.txt": "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt»,
& Nbsp? "Subdir / bar.txt": "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt"
}
JSONP
>>> Σύστημα ("hashedassets -Ν my_callback χάρτες / εισόδου map.jsonp / *. Txt είσοδος / έξοδος * txt / *. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Εκτυπώσετε ανοιχτή («χάρτες / map.jsonp»). Read ()
my_callback ({
& Nbsp? "Foo.txt": "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt»,
& Nbsp? "Subdir / bar.txt": "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt"
})?
Sass
Sass είναι μια μετα-γλώσσα στο επάνω μέρος του CSS.
>>> Σύστημα ("hashedassets -Ν my_callback χάρτες / map.scss εισόδου / *. Txt εισόδου / * / * εξόδου txt. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Εκτυπώσετε ανοιχτή («χάρτες / map.scss»). Read ()
mixin my_callback ($ οδηγία, $ PATH) {
& Nbsp?if $ Διαδρομή == "subdir / bar.txt" {{# $ οδηγίας}: url ("Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt")? }
& Nbsp?else Αν η διαδρομή $ == "foo.txt" {{# $ οδηγίας}: url ("C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt")? }
& Nbsp?else {
& Nbsp?warn "Δεν βρήκατε" # {$ path} "στη λίστα των περιουσιακών στοιχείων"?
& Nbsp? # {$ Οδηγίας}: url ($ διαδρομή)?
& Nbsp?}
}
PHP
>>> Σύστημα ("hashedassets -Ν my_callback χάρτες / εισόδου map.php / *. Txt είσοδος / έξοδος * txt / *. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Εκτυπώσετε ανοιχτή («χάρτες / map.php»). Read ()
$ My_callback = array (
& Nbsp? "Subdir / bar.txt" => "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt»,
& Nbsp? "Foo.txt" => "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt»,
)
Sed
Μπορούμε επίσης να δημιουργήσετε ένα σενάριο sed που κάνει τις αντικαταστάσεις για εμάς:
>>> Σύστημα ("hashedassets -n χάρτες my_callback / map.sed εισόδου / *. Txt εισόδου / * / εξόδου txt *. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Print ανοιχτή («χάρτες / map.sed»). Read ()
s / subdir / Bar .txt / Ys23Ag_5IOWqZCw9QGaVDdHwH00 .txt / g
s / foo .txt / C-7Hteo_D9vJXQ3UfzxbwnXaijM .txt / g
Θα πρέπει επίσης να είναι σε θέση να χρησιμοποιήσει αυτό άμεσα με sed
>>> Με ανοικτό ("replaceme.html", "W") ως αρχείο:
... File.write (' bar ')
Το σενάριο συνέχεια εφαρμόζεται ως εξής:
>>> Σύστημα ("sed -f χάρτες / map.sed replaceme.html")
bar
Ωστόσο, '.' δεν αντιμετωπίζεται ως μπαλαντέρ, συνεπώς τα ακόλουθα δεν λειτουργεί
>>> Με ανοικτό ("replaceme2.html", "W") ως αρχείο:
... File.write (' bar ')
>>> Σύστημα ("sed -f χάρτες / map.sed replaceme2.html")
bar
Καθορισμός του τύπου με -t
Ο τύπος του χάρτη είναι μαντέψατε από το όνομα αρχείου, αλλά μπορείτε να την ορίσετε επίσης:
>>> Σύστημα ("hashedassets -t js cantguessmaptype εισόδου / *. Txt εισόδου / * / *. Txt εξόδου /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
Καθορισμός του μήκους του αρχείου με -l
>>> Σύστημα ("hashedassets -l 10 χάρτες / εισόδου shortmap.json / *. Txt είσοδος / έξοδος * txt / *. /")
cp 'εισροών / foo.txt' 'εξόδου / C-7Hteo_D9.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IO.txt »
>>> Σύστημα ("εξόδου RM / εξόδου C-7Hteo_D9.txt / Ys23Ag_5IO.txt")
Καθορισμός της πέψης με -d
>>> Σύστημα ("hashedassets -d MD5 χάρτες / εισόδου shortmap.json / *. Txt εισόδου / * / *. Txt εξόδου /")
cp 'εισροών / foo.txt' 'εξόδου / rL0Y20zC-Fzt72VPzMSk2A.txt »
cp 'εισόδου / subdir / bar.txt' 'εξόδου / N7UdGUp1E-RbVvZSTy1R8g.txt »
>>> Σύστημα ("εξόδου RM / rL0Y20zC-Fzt72VPzMSk2A.txt εξόδου / N7UdGUp1E-RbVvZSTy1R8g.txt")
Re-χρησιμοποιώντας ένα χάρτη
Το πρόγραμμα διαβάζει χάρτες που δημιουργήθηκαν στην προηγούμενη πορεία να αντιγράψετε μόνο τα αρχεία που δεν έχουν αλλάξει από τότε. Έτσι, οι ακόλουθες εντολές μην αντιγράψετε τα αρχεία:
>>> Σύστημα ("hashedassets χάρτες / map.scss εισόδου / *. Txt εισόδου / * / * εξόδου txt. /")
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.php / *. Txt εισόδου / * / * εξόδου txt. /")
>>> Σύστημα ("hashedassets χάρτες / map.js εισόδου / *. Txt εισόδου / * / * εξόδου txt. /")
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.json / *. Txt εισόδου / * / * εξόδου txt. /")
>>> Σύστημα ("hashedassets χάρτες / map.sed εισόδου / *. Txt είσοδος / έξοδος * txt / *. /")
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.jsonp / *. Txt εισόδου / * / * εξόδου txt. /")
>>> Σύστημα ("hashedassets χάρτες / map.txt εισόδου / *. Txt είσοδος / έξοδος * txt / *. /")
Αν αγγίξετε ένα από τα αρχεία εισόδου στο μεταξύ, το αρχείο θα πρέπει να διαβάσει, αλλά δεν αντιγράφεται γιατί η hashsum είναι η ίδια:
>>> Σύστημα («αγγίξει -t200504072214.12 εισόδου / foo.txt»)
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.json / *. Txt εισόδου / * / * εξόδου txt. /")
Αν αλλάξουμε το περιεχόμενο του αρχείου, θα πάρετε ένα νέο όνομα:
>>> Με ανοικτό ("input / foo.txt", "W") ως αρχείο:
... File.write ("foofoo")
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.json / *. Txt εισόδου / * / * εξόδου txt. /")
RM »εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt»
cp 'εισροών / foo.txt' 'εξόδου / QIDaFD7KLKQh0l5O6b8exdew3b0.txt »
Αν στη συνέχεια απαριθμεί τα αρχεία στον κατάλογο, σημειώστε ότι το παλιό αρχείο '' εξόδου / C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt '' έχει φύγει:
>>> Σύστημα ("εξόδου ls /")
QIDaFD7KLKQh0l5O6b8exdew3b0.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
Αν αφαιρέσετε ένα από τα αρχεία που δημιουργήσατε, παίρνει ανασυνταχθεί:
>>> Σύστημα ("εξόδου RM / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt")
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.json / *. Txt εισόδου / * / * εξόδου txt. /")
cp 'εισόδου / subdir / bar.txt' 'εξόδου / Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt »
>>> Σύστημα ("εξόδου ls /")
QIDaFD7KLKQh0l5O6b8exdew3b0.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
Εάν ένα αρχείο που πρόκειται να αφαιρεθεί, διότι το αρχικό περιεχόμενο αλλάξει, δεν αναδημιουργείται:
>>> Σύστημα ("εξόδου RM / QIDaFD7KLKQh0l5O6b8exdew3b0.txt")
>>> Με ανοικτό ("input / foo.txt", "W") ως αρχείο:
... File.write ("foofoofoo")
>>> Σύστημα ("hashedassets χάρτες / εισόδου map.json / *. Txt εισόδου / * / * εξόδου txt. /")
cp 'εισροών / foo.txt' 'εξόδου / NdbmnXyjdY2paFzlDw9aJzCKH9w.txt »
Σφάλμα χειρισμού
Ωστόσο, αν τρέξουμε αυτό χωρίς επιχειρήματα, αποτυγχάνει:
>>> Σύστημα ("hashedassets", εξωτερική = True)
Χρήση: hashedassets [επιλογές] αρχείο αντιστοίχισης ΠΗΓΗ [...] ΠΡΟΟΡΙΣΜΟ
hashedassets: Σφάλμα: Θα πρέπει να ορίσετε τουλάχιστον mapfile ΠΗΓΗ και ΠΡΟΟΡΙΣΜΟΣ
Απαιτήσεις :
- Python
Τα σχόλια δεν βρέθηκε