Jump to content



wget ταυτόχρονη αλλαγή ονόματος και αποθήκη σε άλλο φάκελο.


Recommended Posts

Δεν ήξερα σε ποια κατηγορία να βάλω το θέμα μου αλλά νομίζω ότι ταιριάζει περισσότερο εδώ. Φτιάχνω ένα προγραμματάκι (δεν νομίζω να έχει σημασία σε τι γλώσσα), το οποίο θα καλεί το 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 δεν συνεργάζονται. Μπορεί να κάνω και εγώ καμιά βλακεία και να μην το έχω πάρει χαμπάρι. Καμιά ιδέα;

 

Ευχαριστώ εκ των προτέρων.

Έγινε επεξεργασία από gokuthelegend
Link to comment
Share on other sites

wget -p temp -o goooogle.html www.google.com

Ήταν από τα πρώτα που δοκίμασα, αλλά τζίφος. Το έχεις δοκιμάσει και σου δούλεψε;

Έγινε επεξεργασία από gokuthelegend
Link to comment
Share on other sites

Μπορείς να βάλεις όσα 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

 

Μπορείς να βάλεις όσα 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

Βασικά βρήκα μια λύση χωρίς να αξιοποιήσω το -P που μεταφέρει το αρχείο σε φάκελο που ορίζω. Μπορώ να ορίσω τον φάκελο κατευθείαν  στο -O, δηλαδή να το κάνω -O temp/gooooogle.htm

 

Το μόνο μειονέκτημα σε αυτή την περίπτωση είναι ότι ο φάκελος δεν δημιουργείται αυτόματα (με το -P δημιουργείται αυτόματα σε περίπτωση που δεν υπάρχει), και βγάζει σφάλμα αν δεν υπάρχει ο συγκεκριμένος φάκελος, οπότε εγώ εκ των προτέρων θα πρέπει να γράψω μια εντολή στην γλώσσα που προγραμματίζω που να ελέγχει αν υπάρχει αυτός ο φάκελος, και αν δεν υπάρχει τότες να τον δημιουργεί.

 

Παρόλα αυτά θα ήθελα να δούμε αν μπορούμε να κάνουμε κάτι αξιοποιώντας μόνο το wget, οπότε περιμένω ακόμη μιαν απάντηση....

Link to comment
Share on other sites

Εφόσον κατασκευάζεις εσύ το 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

Το 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

Παρόλα αυτά θα ήθελα να δούμε αν μπορούμε να κάνουμε κάτι αξιοποιώντας μόνο το wget, οπότε περιμένω ακόμη μιαν απάντηση....

 

Έχεις δύο επιλογές:

  1. Κάνεις ένα shell script, και καλείς αυτό αντί της wget.
  2. Αντί να καλείς την wget, καλείς κάποιο "sh" με το -c argument:
  3. bash -c "mkdir -p temp && wget \"http://www.google.com\" -O \"temp/google.html\""
Link to comment
Share on other sites

Έχεις δίκιο, το δοκίμασα και δεν δούλεψε και με τα δύο μαζί. Εγώ το χρησιμοποιώ για να κατεβάζω στο ίδιο path με το wget exe, οπότε δεν μου είχε χρειαστεί επί της ουσίας.

 

δοκίμασε να προσθέσεις το -x "force creation of directories."

Τζίφος και το -x. Θα συνεχίζω να δοκιμάζω διάφορους συνδυασμούς ελπίζοντας να βρω κάτι.

 

Έχεις δύο επιλογές:

  1. Κάνεις ένα shell script, και καλείς αυτό αντί της wget.
  2. Αντί να καλείς την wget, καλείς κάποιο "sh" με το -c argument:
  3. bash -c "mkdir -p temp && wget \"http://www.google.com\" -O \"temp/google.html\""

 

Χμμμ, κάτι μπορεί να γίνει εδώ, θα το έχω υπόψην.

 

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

Έγινε επεξεργασία από gokuthelegend
Link to comment
Share on other sites

Το δοκίμασα αλλά σε αυτή την περίπτωση μου βγάζει σφάλμα σε περίπτωση που υπάρχει ο φάκελος, και δεν συνεχίζει με την επόμενη εντολή.
bash -c "mkdir -p \"temp\" ; wget \"http://www.google.com\" -O \"temp/google.html\""
Link to comment
Share on other sites

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.

Έγινε επεξεργασία από gokuthelegend
Link to comment
Share on other sites

Να σημειώσω ότι είμαι σε 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

 

 

 -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

Λοιπόν, επανέρχομαι στο θέμα, ο όλος σκοπός είναι με μια γραμμή να δημιουργηθεί ένας φάκελος και να κατεβεί μια σελίδα ή ένα αρχείο με το wget σε αυτό τον φάκελο. Το θέμα απαντήθηκε κατά 99% από τον φίλο @sstemp, δηλαδή το να χρησιμοποιήσουμε το 

mkdir temp && wget www.google.com -O temp/google.html

Το κόλλημα λοιπόν που ήταν; Το διπλό & είναι το λογικό "and", δηλαδή πρέπει να ισχύει και το ένα και το άλλο, έτσι όταν το πρώτο σκέλος έβλεπε ότι ο φάκελος υπήρχε ήδη, τότε έβγαζε σφάλμα και σταματούσε η εκτέλεση εντελώς, με αποτέλεσμα η 2η εντολή να μην εκτελείται. Η όλη υπόθεση ήταν να βάλω ένα &, σε αυτή την περίπτωση εκτελούνται και οι 2 εντολές ανεξαρτήτως αν θα εκτελεστούν επιτυχώς ή ανεπιτυχώς. Το ενσωμάτωσα επιτυχώς και στον κωδικά μου, οπότε τέλος καλό όλα καλά.

Έγινε επεξεργασία από gokuthelegend
  • Like 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.