Jump to content



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


gokuthelegend

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

 

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

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

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

Μπορείς να βάλεις όσα switches θέλεις το ένα δίπλα στο άλλο.

 

Προσωπικά χρησιμοποιώ τα full switches με τη διπλή παύλα γιατί είναι πιο εύκολο να τα θυμάμαι μετά αν θέλω να αλλάξω κάτι. Τα βλέπεις με το 

wget --help

Για την περίπτωση σου θέλεις κάτι τέτοιο:

wget http://www.google.com/ --directory-prefix=C:\Folder --output-document=filename.txt

 

Μπορείς να βάλεις όσα switches θέλεις το ένα δίπλα στο άλλο.

 

Προσωπικά χρησιμοποιώ τα full switches με τη διπλή παύλα γιατί είναι πιο εύκολο να τα θυμάμαι μετά αν θέλω να αλλάξω κάτι. Τα βλέπεις με το 

wget --help

Για την περίπτωση σου θέλεις κάτι τέτοιο:

wget http://www.google.com/ --directory-prefix=C:\Folder --output-document=filename.txt

Το wget --help το γνωρίζω και το διάβασα καλά, αλλά ούτε αυτό που μου έγραψες έκανε κάτι. Βασικά εσύ το έτρεξες και σου δούλεψε; Τρέχοντας το δικό σου παράδειγμα μου κατέβασε την σελίδα, την μετονόμασε, αλλά δεν την αποθήκευσε στον φάκελο που όρισα.

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

 

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

 

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

Εφόσον κατασκευάζεις εσύ το command line: wget "http://www.google.com" -O myfolder/google.html


Η αιτία που δεν συνεργάζονται το -P με το -Ο, είναι ο τρόπος που λειτουργεί η -O: concatenates whole output into a single file (παρακάμπτει όλη την λογική του pathing).

Το wget --help το γνωρίζω και το διάβασα καλά, αλλά ούτε αυτό που μου έγραψες έκανε κάτι. Βασικά εσύ το έτρεξες και σου δούλεψε; Τρέχοντας το δικό σου παράδειγμα μου κατέβασε την σελίδα, την μετονόμασε, αλλά δεν την αποθήκευσε στον φάκελο που όρισα.

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

 

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

 

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

 

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

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

Παρόλα αυτά θα ήθελα να δούμε αν μπορούμε να κάνουμε κάτι αξιοποιώντας μόνο το 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\""

Έχεις δίκιο, το δοκίμασα και δεν δούλεψε και με τα δύο μαζί. Εγώ το χρησιμοποιώ για να κατεβάζω στο ίδιο 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ου.

Το δοκίμασα αλλά σε αυτή την περίπτωση μου βγάζει σφάλμα σε περίπτωση που υπάρχει ο φάκελος, και δεν συνεχίζει με την επόμενη εντολή.
bash -c "mkdir -p \"temp\" ; wget \"http://www.google.com\" -O \"temp/google.html\""
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.

Να σημειώσω ότι είμαι σε 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 μάλλον δεν το χρειάζεσαι.

 

 

 -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 εντολές, σιγά το πράγμα.

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

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

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

Archived

This topic is now archived and is closed to further replies.

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

Important Information

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