gokuthelegend Δημοσιεύτηκε Νοέμβριος 28, 2014 #1 Κοινοποίηση Δημοσιεύτηκε Νοέμβριος 28, 2014 (edited) Δεν ήξερα σε ποια κατηγορία να βάλω το θέμα μου αλλά νομίζω ότι ταιριάζει περισσότερο εδώ. Φτιάχνω ένα προγραμματάκι (δεν νομίζω να έχει σημασία σε τι γλώσσα), το οποίο θα καλεί το wget και θα κατεβάζει μαζικά σελίδες ή αρχεία. Να θυμίσω για όσους ξέρουν: wget www.google.com --> κατεβάζει την σελίδα χωρίς να αλλάξει την ονομασία του αρχείου και την αποθηκεύει στο / (root folder)wget www.google.com -P temp --> κατεβάζει την σελίδα και την τοποθετεί στον φάκελο /temp/wget www.google.com -O goooooogle.htm --> κατεβάζει την σελίδα αλλά μετονομάζει το αρχείο σε goooooogle.htm Ωραία ως εδώ. Εγώ έχω κολλήσει στο εξής, θέλω να αξιοποιήσω και τα 2 switches ταυτόχρονα, δηλαδή ταυτόχρονα να μετονομάζω το αρχείο και να το αποθηκεύω σε ένα διαφορετικό φάκελο. Για κάποιο λόγο όμως κάτι κάνω λάθος και τα 2 switches δεν συνεργάζονται. Μπορεί να κάνω και εγώ καμιά βλακεία και να μην το έχω πάρει χαμπάρι. Καμιά ιδέα; Ευχαριστώ εκ των προτέρων. Έγινε επεξεργασία Νοέμβριος 28, 2014 από gokuthelegend Link to comment Share on other sites More sharing options...
defiant Νοέμβριος 28, 2014 #2 Κοινοποίηση Νοέμβριος 28, 2014 wget -p temp -o goooogle.html www.google.com Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #3 Κοινοποίηση Νοέμβριος 28, 2014 (edited) wget -p temp -o goooogle.html www.google.comΉταν από τα πρώτα που δοκίμασα, αλλά τζίφος. Το έχεις δοκιμάσει και σου δούλεψε; Έγινε επεξεργασία Νοέμβριος 28, 2014 από gokuthelegend Link to comment Share on other sites More sharing options...
jpavly Νοέμβριος 28, 2014 #4 Κοινοποίηση Νοέμβριος 28, 2014 Μπορείς να βάλεις όσα switches θέλεις το ένα δίπλα στο άλλο. Προσωπικά χρησιμοποιώ τα full switches με τη διπλή παύλα γιατί είναι πιο εύκολο να τα θυμάμαι μετά αν θέλω να αλλάξω κάτι. Τα βλέπεις με το wget --helpΓια την περίπτωση σου θέλεις κάτι τέτοιο:wget http://www.google.com/ --directory-prefix=C:\Folder --output-document=filename.txt Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #5 Κοινοποίηση Νοέμβριος 28, 2014 Μπορείς να βάλεις όσα switches θέλεις το ένα δίπλα στο άλλο. Προσωπικά χρησιμοποιώ τα full switches με τη διπλή παύλα γιατί είναι πιο εύκολο να τα θυμάμαι μετά αν θέλω να αλλάξω κάτι. Τα βλέπεις με το wget --helpΓια την περίπτωση σου θέλεις κάτι τέτοιο:wget http://www.google.com/ --directory-prefix=C:\Folder --output-document=filename.txtΤο wget --help το γνωρίζω και το διάβασα καλά, αλλά ούτε αυτό που μου έγραψες έκανε κάτι. Βασικά εσύ το έτρεξες και σου δούλεψε; Τρέχοντας το δικό σου παράδειγμα μου κατέβασε την σελίδα, την μετονόμασε, αλλά δεν την αποθήκευσε στον φάκελο που όρισα. Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #6 Κοινοποίηση Νοέμβριος 28, 2014 Βασικά βρήκα μια λύση χωρίς να αξιοποιήσω το -P που μεταφέρει το αρχείο σε φάκελο που ορίζω. Μπορώ να ορίσω τον φάκελο κατευθείαν στο -O, δηλαδή να το κάνω -O temp/gooooogle.htm Το μόνο μειονέκτημα σε αυτή την περίπτωση είναι ότι ο φάκελος δεν δημιουργείται αυτόματα (με το -P δημιουργείται αυτόματα σε περίπτωση που δεν υπάρχει), και βγάζει σφάλμα αν δεν υπάρχει ο συγκεκριμένος φάκελος, οπότε εγώ εκ των προτέρων θα πρέπει να γράψω μια εντολή στην γλώσσα που προγραμματίζω που να ελέγχει αν υπάρχει αυτός ο φάκελος, και αν δεν υπάρχει τότες να τον δημιουργεί. Παρόλα αυτά θα ήθελα να δούμε αν μπορούμε να κάνουμε κάτι αξιοποιώντας μόνο το wget, οπότε περιμένω ακόμη μιαν απάντηση.... Link to comment Share on other sites More sharing options...
sstemp Νοέμβριος 28, 2014 #7 Κοινοποίηση Νοέμβριος 28, 2014 Εφόσον κατασκευάζεις εσύ το command line: wget "http://www.google.com" -O myfolder/google.html Η αιτία που δεν συνεργάζονται το -P με το -Ο, είναι ο τρόπος που λειτουργεί η -O: concatenates whole output into a single file (παρακάμπτει όλη την λογική του pathing). Link to comment Share on other sites More sharing options...
jpavly Νοέμβριος 28, 2014 #8 Κοινοποίηση Νοέμβριος 28, 2014 Το wget --help το γνωρίζω και το διάβασα καλά, αλλά ούτε αυτό που μου έγραψες έκανε κάτι. Βασικά εσύ το έτρεξες και σου δούλεψε; Τρέχοντας το δικό σου παράδειγμα μου κατέβασε την σελίδα, την μετονόμασε, αλλά δεν την αποθήκευσε στον φάκελο που όρισα.Έχεις δίκιο, το δοκίμασα και δεν δούλεψε και με τα δύο μαζί. Εγώ το χρησιμοποιώ για να κατεβάζω στο ίδιο path με το wget exe, οπότε δεν μου είχε χρειαστεί επί της ουσίας. Βασικά βρήκα μια λύση χωρίς να αξιοποιήσω το -P που μεταφέρει το αρχείο σε φάκελο που ορίζω. Μπορώ να ορίσω τον φάκελο κατευθείαν στο -O, δηλαδή να το κάνω -O temp/gooooogle.htm Το μόνο μειονέκτημα σε αυτή την περίπτωση είναι ότι ο φάκελος δεν δημιουργείται αυτόματα (με το -P δημιουργείται αυτόματα σε περίπτωση που δεν υπάρχει), και βγάζει σφάλμα αν δεν υπάρχει ο συγκεκριμένος φάκελος, οπότε εγώ εκ των προτέρων θα πρέπει να γράψω μια εντολή στην γλώσσα που προγραμματίζω που να ελέγχει αν υπάρχει αυτός ο φάκελος, και αν δεν υπάρχει τότες να τον δημιουργεί. Παρόλα αυτά θα ήθελα να δούμε αν μπορούμε να κάνουμε κάτι αξιοποιώντας μόνο το wget, οπότε περιμένω ακόμη μιαν απάντηση....δοκίμασε να προσθέσεις το -x "force creation of directories." Link to comment Share on other sites More sharing options...
sstemp Νοέμβριος 28, 2014 #9 Κοινοποίηση Νοέμβριος 28, 2014 Παρόλα αυτά θα ήθελα να δούμε αν μπορούμε να κάνουμε κάτι αξιοποιώντας μόνο το wget, οπότε περιμένω ακόμη μιαν απάντηση.... Έχεις δύο επιλογές:Κάνεις ένα shell script, και καλείς αυτό αντί της wget. Αντί να καλείς την wget, καλείς κάποιο "sh" με το -c argument: bash -c "mkdir -p temp && wget \"http://www.google.com\" -O \"temp/google.html\"" Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #10 Κοινοποίηση Νοέμβριος 28, 2014 (edited) Έχεις δίκιο, το δοκίμασα και δεν δούλεψε και με τα δύο μαζί. Εγώ το χρησιμοποιώ για να κατεβάζω στο ίδιο path με το wget exe, οπότε δεν μου είχε χρειαστεί επί της ουσίας. δοκίμασε να προσθέσεις το -x "force creation of directories."Τζίφος και το -x. Θα συνεχίζω να δοκιμάζω διάφορους συνδυασμούς ελπίζοντας να βρω κάτι. Έχεις δύο επιλογές:Κάνεις ένα shell script, και καλείς αυτό αντί της wget. Αντί να καλείς την wget, καλείς κάποιο "sh" με το -c argument: bash -c "mkdir -p temp && wget \"http://www.google.com\" -O \"temp/google.html\"" Χμμμ, κάτι μπορεί να γίνει εδώ, θα το έχω υπόψην. Το δοκίμασα αλλά σε αυτή την περίπτωση μου βγάζει σφάλμα σε περίπτωση που υπάρχει ο φάκελος, και δεν συνεχίζει με την επόμενη εντολή. Εκτός φυσικά αν το σπάσω σε 2 κομμάτια, και το 2ο κομμάτι το τρέχω σε κάθε περίπτωση ανεξαρτήτως του 1ου. Έγινε επεξεργασία Νοέμβριος 28, 2014 από gokuthelegend Link to comment Share on other sites More sharing options...
sstemp Νοέμβριος 28, 2014 #11 Κοινοποίηση Νοέμβριος 28, 2014 Το δοκίμασα αλλά σε αυτή την περίπτωση μου βγάζει σφάλμα σε περίπτωση που υπάρχει ο φάκελος, και δεν συνεχίζει με την επόμενη εντολή. bash -c "mkdir -p \"temp\" ; wget \"http://www.google.com\" -O \"temp/google.html\"" Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #12 Κοινοποίηση Νοέμβριος 28, 2014 (edited) bash -c "mkdir -p \"temp\" ; wget \"http://www.google.com\" -O \"temp/google.html\""Δεν ξέρω γιατί αλλά μου βγάζει σφάλμα σύνταξης, τέλος πάντων, αν το σπάσω σε 2 εντολές τότες δουλεύει, οπότε εκτός και αν βρώ κάτι καλύτερο μάλλον θα το αφήσω έτσι. Άσχετο, το -p στο mkdir τι κάνει ακριβώς; Έτρεξα mkdir -p temp και μου έφτιαξε 2 φακέλους, τον φάκελο temp και έναν φάκελο με την ονομασία -p. Να σημειώσω ότι είμαι σε Windows και όχι σε Linux. Η εντολή δουλεύει χωρίς το -p. Έγινε επεξεργασία Νοέμβριος 28, 2014 από gokuthelegend Link to comment Share on other sites More sharing options...
sstemp Νοέμβριος 28, 2014 #13 Κοινοποίηση Νοέμβριος 28, 2014 Να σημειώσω ότι είμαι σε Windows και όχι σε Linux -p, --parents no error if existing, make parent directories as needed Εγώ δεν έχω windows Ίσως αν αντικαταστήσεις το semicolon με "\r\n" το δεί σαν 2 commands? Από ότι βλέπω εδώ http://technet.microsoft.com/en-us/library/bb490930.aspx μάλλον δεν το χρειάζεσαι. Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #14 Κοινοποίηση Νοέμβριος 28, 2014 -p, --parents no error if existing, make parent directories as needed Εγώ δεν έχω windows Ίσως αν αντικαταστήσεις το semicolon με "\r\n" το δεί σαν 2 commands? Από ότι βλέπω εδώ http://technet.microsoft.com/en-us/library/bb490930.aspx μάλλον δεν το χρειάζεσαι. Ούτε έτσι. Τέλος πάντων, δεν πειράζει, θα το σπάσω σε 2 εντολές, σιγά το πράγμα. Link to comment Share on other sites More sharing options...
gokuthelegend Νοέμβριος 28, 2014 Author #15 Κοινοποίηση Νοέμβριος 28, 2014 (edited) Λοιπόν, επανέρχομαι στο θέμα, ο όλος σκοπός είναι με μια γραμμή να δημιουργηθεί ένας φάκελος και να κατεβεί μια σελίδα ή ένα αρχείο με το wget σε αυτό τον φάκελο. Το θέμα απαντήθηκε κατά 99% από τον φίλο @sstemp, δηλαδή το να χρησιμοποιήσουμε το mkdir temp && wget www.google.com -O temp/google.htmlΤο κόλλημα λοιπόν που ήταν; Το διπλό & είναι το λογικό "and", δηλαδή πρέπει να ισχύει και το ένα και το άλλο, έτσι όταν το πρώτο σκέλος έβλεπε ότι ο φάκελος υπήρχε ήδη, τότε έβγαζε σφάλμα και σταματούσε η εκτέλεση εντελώς, με αποτέλεσμα η 2η εντολή να μην εκτελείται. Η όλη υπόθεση ήταν να βάλω ένα &, σε αυτή την περίπτωση εκτελούνται και οι 2 εντολές ανεξαρτήτως αν θα εκτελεστούν επιτυχώς ή ανεπιτυχώς. Το ενσωμάτωσα επιτυχώς και στον κωδικά μου, οπότε τέλος καλό όλα καλά. Έγινε επεξεργασία Νοέμβριος 28, 2014 από gokuthelegend 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now