2010-12-10 92 views
0

J'ai posté plus tôt besoin d'aide avec un script pour lire une liste d'URL ".mp3" à partir d'un fichier texte ("URLs.txt «), télécharger chaque fichier, renommer dans l'ordre numérique (1,2,3 ...), puis enregistrez dossier "URL" sur le bureau:Problème avec le script Unix Bash qui lit dans Urls Mp3 à partir du fichier .TXT, puis télécharge et renomme les fichiers

URLs.txt
http: // ... 34566.mp3
http: // ... 234.mp3
http: // ... 126567.mp3

... devient ...

URL dossier Bureau
1.mp3
2.mp3
3.mp3

Peu de temps après, je reçus aimablement la réponse suivante sous Unix bash (pour utilisation dans Automator):

#!/bin/bash 
mkdir -p ~/Desktop/URLs 
n=1 
while read mp3; do 
    curl "$mp3" > ~/Desktop/URLs/$n.mp3 
    ((n++)) 
done < ~/Desktop/URLs.txt 

Toutefois, bien que le script s'exécute correctement, il ne téléchargera que les fichiers dont la taille est comprise entre "47.mp3" et "49.mp3". Le script ne s'arrête pas, il ne télécharge rien au-delà de cette plage ...

Je suis très nouveau sur Unix bash, et excusez mon ignorance, mais est-il possible qu'il y ait une "limite de 50" sur script ou page Web?

Je ne sais pas combien d'URL mon fichier texte a, mais il est bien plus 49.

Je l'ai regardé dans le fichier texte pour faire en sorte que tous les chemins URL sont corrects et tout semble bien ...

Egalement téléchargé 47 - 52 manuellement pour vous assurer qu'ils peuvent réellement être téléchargés - ce qu'ils sont.

Répondre

0

Non, il n'y a pas de limite inhérente au script shell que vous utilisez.

Est-il possible que le serveur web sur lequel vous téléchargez les MP3 dispose d'un limiteur de débit qui démarre à 50 téléchargements en trop peu de temps? Si c'est le cas, vous devrez ralentir votre script.

Essayez cette modification et de voir ce qui se passe si vous commencez à la 50e MP3:

#!/bin/bash 
mkdir -p ~/Desktop/URLs 
n=1 
while read mp3; do 
    ((n >= 50)) && curl "$mp3" > ~/Desktop/URLs/$n.mp3 
    ((n++)) 
done < ~/Desktop/URLs.txt 

Si vous voulez le ralentir ajouter un appel vers le bas sleep à la boucle.

+0

Merci pour votre réponse, John. J'ai couru le script et il m'a donné 50 - 88, puis a calé sur 89 ... Y at-il un moyen de mettre un "timer" dans le script afin que télécharge 1 fichier par "x" nombre de secondes? ... ou une autre solution de contournement. –

+0

@ user536067 Ajoutez 'sleep x' dans la boucle while pour mettre en pause pendant x secondes entre les téléchargements. –