Πώς να ελέγξετε το σύνολο των αρχείων σύμφωνα με ένα σχήμα ονοματοδοσίας




Έχω μια δέσμη των αρχείων (τηλεοπτικά επεισόδια, αν και αυτό είναι αρκετά αυθαίρετη) που θέλω να ελέγξετε ταιριάζει με ένα συγκεκριμένο σχήμα ονοματοδοσίας / οργανισμού ..


Επί του παρόντος: Έχω τρεις σειρές regex, ένα για έγκυρα ονόματα, ένα για τα αρχεία που λείπουν ένα όνομα επεισόδιο, και ένα για έγκυρες διαδρομές.


Στη συνέχεια, θα βρόχο αν και κάθε regex ισχύει, όνομα αρχείου, αν ταιριάζει, να το προσθέσετε σε μια «έγκυρη» dict, αν όχι, να κάνει το ίδιο και με τους αγνοούμενους-ep-όνομα regexs, αν ταιριάζει με αυτό που το προσθέσετε σε ένα «μη έγκυρη dict με έναν κωδικό σφάλματος (2:“λείπει το όνομα epsiode”), αν ταιριάζει ούτε, παίρνει προστεθεί στο άκυρο με το“Εσφαλμένα ονομασία”κωδικός σφάλματος.


Ο ισχύων κώδικας μπορεί να βρεθεί [εδώ](http://github.com/dbr/checktveps/tree/8a6dc68ad61e684c8d8f0ca1dc37a22d1c51aa82/2checkTvEps.py)


Θέλω να προσθέσω έναν κανόνα που ελέγχει για την παρουσία ενός αρχείου folder.jpg σε κάθε κατάλογο, αλλά για να προσθέσετε αυτό θα κάνει ο κώδικας σημαντικά πιο βρώμικο σε αυτό είναι σημερινή κατάσταση .. 


Πώς θα μπορούσα να γράψω αυτό το σύστημα σε μια πιο επεκτάσιμη τρόπο;


Οι κανόνες που πρέπει να ελέγξετε θα ήταν ..


* Το αρχείο είναι σε μορφή `Show Name - [01x23] - Episode Name.avi`ή `Show Name - [01xSpecial02] - Special Name.avi`ή`Show Name - [01xExtra01] - Extra Name.avi`
* Εάν το όνομα αρχείου είναι σε μορφή `Show Name - [01x23].avi`εμφανίσετε το τμήμα «λείπει το όνομα επεισόδιο» της εξόδου
* Η διαδρομή θα πρέπει να είναι σε μορφή `Show Name/season 2/the_file.avi`(όπου σεζόν 2 θα πρέπει να είναι ο σωστός αριθμός σεζόν στο όνομα του αρχείου)
* κάθε `Show Name/season 1/`φάκελος θα πρέπει να περιέχει «folder.jpg»


.καμιά ιδέα? Ενώ προσπαθώ να ελέγξει τηλεοπτικά επεισόδια, η έννοια / κώδικας θα πρέπει να είναι σε θέση να εφαρμόσει σε πολλά πράγματα ..


Η μόνη σκέψη που είχα ήταν ένας κατάλογος των DICTS με τη μορφή:



```
checker = [
{
    'name':'valid files',
    'type':'file',
    'function':check_valid(), # runs check_valid() on all files
    'status':0 # if it returns True, this is the status the file gets
}

```
> 
> Θέλω να προσθέσω έναν κανόνα που ελέγχει για την παρουσία ενός αρχείου folder.jpg σε κάθε κατάλογο, αλλά για να προσθέσετε αυτό θα κάνει ο κώδικας σημαντικά πιο βρώμικο σε αυτό είναι σημερινή κατάσταση ..
> 
> 
> 


Αυτό δεν φαίνεται κακό. Στην πραγματικότητα τρέχοντα κωδικό σας κάνει πολύ όμορφα, και Sven αναφέρεται ένας καλός τρόπος για να το κάνει, καθώς:


1. Πάρτε μια λίστα με όλα τα αρχεία
2. Ελέγξτε για «απαιτείται» αρχεία


Εσείς απλά θα πρέπει να προσθέσετε στο λεξικό σας μια λίστα με τα απαραίτητα αρχεία:



```
checker = {
  ...
  'required': ['file', 'list', 'for_required']
}

```

Όσον αφορά την ύπαρξη ένας καλύτερος / επεκτάσιμο τρόπο για να το κάνετε αυτό; Δεν είμαι ακριβώς σίγουρος. Θα μπορούσα μόνο να σκεφτώ έναν τρόπο για να ενδεχομένως να αποσύρει τις «πολλαπλές» κανονικές εκφράσεις και να οικοδομήσουν μακριά από την ιδέα του Sven για τη χρήση διαχωριστικό. Έτσι η στρατηγική μου θα ορίζει ένα λεξικό ως εξής (και λυπάμαι δεν ξέρω Python σύνταξη και είμαι ένα αγοράκι να τεμπέλης για να το ψάξει, αλλά θα πρέπει να έχει νόημα. Ο / regex / είναι συντομογραφία για ένα regex ):



```
check_dict = {
  'delim'    : /\-/,
  'parts'    : [ 'Show Name', 'Episode Name', 'Episode Number' ],
  'patterns' : [/valid name/, /valid episode name/, /valid number/ ],
  'required' : ['list', 'of', 'files'],
  'ignored'  : ['.*', 'hidden.txt'],
  'start_dir': '/path/to/dir/to/test/'
}

```

1. Χωρίστε το όνομα του αρχείου με βάση το διαχωριστικό.
2. Ελέγξτε καθένα από τα μέρη.


Επειδή μια ταξινομημένη λίστα του μπορείτε να καθορίσετε τι λείπει μέρη και αν ένα τμήμα δεν ταιριάζει με κανένα σχέδιο είναι ακατάλληλο. Εδώ η `parts`και `patterns`έχουν μια αναλογία 1 προς 1. Δύο σειρές αντί ενός λεξικού επιβάλλει την τάξη.


Αγνοήθηκε και απαραίτητα αρχεία μπορούν να αναφέρονται. Η `.`και `..`τα αρχεία θα πρέπει κατά πάσα πιθανότητα να αγνοηθούν αυτόματα. Ο χρήστης θα πρέπει να επιτρέπεται να εισόδου «globs» η οποία μπορεί να επεκταθεί κέλυφος. Σκέφτομαι εδώ `svn:ignore`τις ιδιότητες, αλλά globbing είναι φυσικό για την εγγραφή αρχείων.


Εδώ `start_dir`θα προεπιλογή στον τρέχοντα κατάλογο, αλλά αν θέλετε ένα ενιαίο αρχείο για να τρέξει αυτοματοποιημένη δοκιμή από μια δέσμη των καταλόγων αυτό θα ήταν χρήσιμο.


Το πραγματικό ελεύθερο άκρο εδώ είναι το πρότυπο διαδρομή και προς την ίδια κατεύθυνση απαιτείται ποιο μονοπάτι για «έγκυρα αρχεία». Πραγματικά δεν θα μπορούσε να καταλήξει σε μια σταθερή ιδέα χωρίς να γράψετε μία μεγάλη κανονική έκφραση και τη λήψη των ομάδων από αυτό ... για να χτίσει ένα πρότυπο. Ένιωσα πολύ όπως γράφει ένα TextMate γλώσσα γραμματική. Αλλά αυτό αρχίζει να απομακρυνθούν από την ευκολία χρήσης. Το πραγματικό πρόβλημα ήταν ότι το πρότυπο μονοπάτι δεν αποτελείται από `parts`, το οποίο έχει νόημα, αλλά προσθέτει πολυπλοκότητα.


Είναι αυτή η στρατηγική σε αρμονία με αυτό που σκέφτεστε;
μισό. έχεις και windows και δεν τα βλέπεις στο μενού του grub ?

αν σε βολεύει αλλάζεις το grub\_timeout\_style απο hidden σε grub\_timeout\_style="menu". κάθε αλλαγή σε αυτό το αρχείο, αλλά και για να δει τα windows θέλει την εντολή

sudo update-grub εγώ που είναι ένα ανάλογο πρόβλημα στο arch (δεν έκλεινε το συρτάρι αν το άνοιγα) το διόρθωσα ως εξής:

έκανα αντίγραφο του αρχείου

60-cdrom\_id.rules

πιο συγκεκριμένα

sudo cp /usr/lib/udev/rules.d/60-cdrom\_id.rules /etc/udev/rules.d/

άνοιξε το με τον editor της αρεσκείας σου και βρες τη γραμμή

e… μπορείς να σβήσεις αυτά τα αρχεία. στην συνέχει μπες στο σύστημα και εγκατέστησε το πακέτο logrotate και δεν θα ξανασυμβεί. κανονικά θε έπρεπε να ήταν εγκατεστημένο.

για περισσότερα

[εικόνα]

[log files: καταγραφές, ρουφιάνοι και ανακύκλωση](https://cerebrux.net/2018/08/09/log-files-%ce%ba%ce%b1%cf%84%ce%b1%ce%b3%cf%81%ce%b1%cf%86%ce%ad%cf%82-%cf%81%ce%bf%cf%85%cf%86%ce%b9%ce%ac%ce%bd%ce%bf%ce%b9-%ce%ba%ce%b1%ce%b9-%ce%b1%ce%bd%ce%b1%ce%ba%cf%8d%ce%ba%ce%bb%cf%89/)

μας παρακολουθούν… όχι εκεί έξω… αλλά ο ίδιος σου… εγκατέστησα την τελευταία έκδοση του προγράμματος και εξακολουθούσα να έχω το ίδιο πρόβλημα. τελικά με τη βοήθεια απο το σχετικό [google group](https://groups.google.com/g/devede-forum/c/2thoie_dsxq) του devedeng, κατάλαβα οτι επιλέγω λάθος encoding type για το αρχείο υποτίτλων που θέλω να βάλω στην ταινία.

όταν επέλεξα το σωστό τύπο encoding για το αρχε… Ενώ μόδας, η λέξη-κλειδί κόλπο αναθεώρηση ενημερώνει μόνο το αρχείο όταν έχει αλλάξει σε αυτή την αναθεώρηση - αν δεν αλλάξει το αρχείο, τότε θα συνεχίσει να αντικατοπτρίζει την παλιά αναθεώρηση.


Αν θέλετε το λογισμικό να αντανακλά πάντα το συνολικό αριθμό αναθεώρησης, τότε θα πρέπει να σκαλίζω το [σχετικό SVN καταχωρήσεις αρχείο](http://svnbook.red-bean.com/en/1.1/ch08s03.html) και αποσυμπιέστε το, το οποίο δεν είναι πάρα πολύ δύσκολο (αυτό είναι ένα αρχείο XML).


Wikipedia το κάνει αυτό στη [σελίδα τους εκδοχή](https://en.wikipedia.org/wiki/Special:Version) για να δείξει την αναθεώρηση του λογισμικού που τρέχει ζωντανά? [ο κώδικας είναι εδώ](https://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/includes/specials/SpecialVersion.php) - αναζητήστε το **getSvnRevision ()** μέθοδο. **Για την «ορθογραφία λάθος» μέρος (Μήπως εννοείτε)**


* Θα μπορούσατε να κάνετε κάποια `LIKE`ερωτήματα στο db π.χ. `LIKE %j%e%a%n%s%`, αλλά αν θέλετε να το κάνετε καλά, θα πρέπει να χρησιμοποιήσετε μια βιβλιοθήκη αναζήτησης όπως αυτό:


	+ <https://github.com/TomLingham/Laravel-Searchy>
	+ <http://tnt.studio/blog/did-you-mean-functionality-with-laravel-scout>



> 
> Μπορείτε να δημοσιεύσετε το αρχείο ρυθμίσεων στον κατάλογο της εφαρμογής σας και να παρακάμψετε τις ρυθμίσεις, εκτελώντας php τεχνίτη πωλητή: δημοσιεύει για να αντιγράψετε τις ρυθμίσεις στο φάκελο config σας όπως searchy.php
> 
> 
> Μπορείτε να ορίσετε το προεπιλεγμένο πρόγραμμα οδήγησης που θα χρησιμοποιηθεί για τις αναζητήσεις στο αρχείο ρυθμίσεων. Οι επιλογές σας (στην παρούσα φάση) είναι: ασαφή, απλό και Levenshtein.
> 
> 
> Μπορείτε επίσης να παρακάμψετε αυτές τις μεθόδους, χρησιμοποιώντας την ακόλουθη σύνταξη κατά την εκτέλεση μιας αναζήτησης:
> 
> 
> 


Με τον καθορισμό [Levenshtein απόσταση](https://en.wikipedia.org/wiki/Levenshtein_distance) μπορείτε να finetune πόσο μακριά μια λέξη μπορεί να είναι.


* Αν χρειάζεστε καλύτερη απόδοση θα πρέπει να εξετάσει κάτι σαν `solr`ή `elasticsearch`για το έργο αυτό.


<https://wiki.apache.org/solr/SpellCheckComponent>
<https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html>


**Για το τμήμα μετάφρασης**


Απλά θα πρέπει να έχει ένα λεξικό έτοιμο σε βάση δεδομένων ή εντοπισμό των αρχείων σας και εκτελέστε το χαμηλότερο σημείο εισόδου και αυτό. Αναμείνετε υψηλή φορές υπολογιστών τόσο για τη διόρθωση ορθογραφίας και της μετάφρασης στον κώδικά σας. Συνήθως δεχόμαστε είτε "have to" είτε "must". Στείλτε μας, παρακαλώ, ένα συγκεκριμένο παράδειγμα που μπορούμε να ελέγξουμε για λάθοι. καλησπέρα καλώς ήρθες φίλε, τρέξε την εντολή που σου λέει :

sudo dpkg --configure -a

και δώσε μας αποτελέσματα, μέσα σε code tags για να είναι ευανάγνωστα. <p>μπορείτε στην πραγματικότητα να συγκρίνετε τα αρχεία εγγενώς στο sublime text.</p><ol> <li>μεταβείτε στο φάκελο που περιέχει τους μέσω <code>open folder...</code> ή σε ένα έργο</li> <li>επιλέξτε τα δύο αρχεία (π.χ. κρατώντας το <kbd>ctrl</kbd> σε windows ή <kbd>⌘</kbd> στο macos) που θέλετε να συγκρίνετε στην πλαϊνή γραμμή</li> <li>κάντε δεξί κλικ και επιλέξτε την επιλογή <code>diff files...</code>.</li> </ol><p><img src="https://i.stack.imgur.com/ggzag.png" width="500"></p> ένα αρχείο tar.xz πρόκειται στην ουσία για ένα συμπιεσμένο αρχείο, αφού το κατεβάσεις προχωράς στην αποσυμπίεση με την εντολή :

tar -xvf filename.tar.xzοι διακόπττες :

-x : extract

-v : verbose (σου δείχνει κατά την εξαγωγή στο τερματικό τα αρχεία που περιλαμβάνει)

-f : filename (δηλώνεις ότι αυ…