#1 9. Oktober 2006 Zuletzt von einem Moderator bearbeitet: 13. April 2017 Hallo zusammen! auf Idee und Wunsch von nicht nur L!Ld4rk halte ich es fuer eine gute Idee, einen Thread mit kleinen nuetzlichen Bash-Scripts zu eroeffnen. Sicher kennt jeder von euch Bash, Shell, Zsh, ... all diese Interpreter koennen genutzt werden, um Scripte auszufuehren, die die taegliche arbeit und/oder die staendig selben Routinen zu erleichtern. So kann man per Script z.B. User hinzufuegen, Festplatten mounten oder eine CD brennen ohne sich viele Befehle merken zu muessen. Dieser Thread soll ein Ort fuer Scripte sein, die man mit einem solchen Interpreter ausfuehren kann. Es soll Fortgeschrittenen vielleicht den Weg zum Programmieren oeffnen, und vor allem anfaengern den Einstieg in die Welt der Unix-Systeme erleichtern. So, jetzt aber zu dem, was euch interessieren wird. Wie soll so ein Post, in dem ich mein Script veroeffentlichen will, aussehen ? Er soll wie folgt aussehen: Code: [b]Name des Scripts:[/b] [b]author:[/b] [b]Beschreibung:[/b] [b]Benutzung:[/b] [b]Code:[/b] [code]#!/bin/interpreter # Hier euer Code # Beachte, dass die erste Zeile '#!/bin/interpreter' sein muss [/code] - Beispiel: Name des Scripts: Name author: Max Mustermann Beschreibung: Ein Testscript Benutzung: ./Name test lala Code:: Code: #!/bin/bash echo -e "Hello World\n" --- Wie fuehre ich so ein Script aus ? 1. Ihr oeffnet mit einem Texteditor euerer Wahl eine leere Textdatei 2. Ihr kopiert den Inhalt der Code-Tags in die Datei 3. Ihr speichert die Datei ab 4. Ihr fuehrt das Folgende aus, um die Datei ausfuehrbar zu machen: Code: chmod +x euer_script.sh Das x steht fuer 'execute' oder 'executable'. 5. Ihr startet nun das Script. Beachtet hierbei 'Benutzung'. Code: ./euer_script.sh --- Sollte ein Script mal nicht so funktionieren, wie es in der Beschreibung steht, sendet bitte eine PN ( Private Nachricht ) an den Scriptautor und schreibt es NICHT hier hinein! Viel Spass beim Coden, Mfg, Kolazomai + Multi-Zitat Zitieren
#2 9. Oktober 2006 AW: Bash-Scripte Name: Mountscript Beschreibung: Es erleichter das Mounten von Medien Author: L!Ld4rk Benutzung: script per ./mount.sh starten danach Anweisungen befolgen Code: Code: #!/bin/bash echo -n "Please enter the Dev to mount. After that tape your root password" read WAYNE echo -n "Enter your device to mount: " read PLATTE su -c "mkdir /media/$PLATTE" su -c "mount /dev/$PLATTE /media/$PLATTE" echo "Thanks for using this script. Written by L!Ld4rk." !Download! Name: Brennscript Beschreibung: Ein Script was das Brennen mit dem Terminal erleichter (cdrecord wird gebraucht) Author: L!Ld4rk Benutzung: script per ./brennen.sh starten danach Anweisungen befolgen Code: Code: #!/bin/bash echo -n "Welcome to the cdburn Script. Please enter to continue!" read WAYNE echo -n "You need the tool "cdrecord" to use this script! If you dont have it search it by google.com!" read WAYNE echo -n "Please enter the number of your cd recorder (sampel dev=0,1,0): " read DEV echo -n "Please enter the burnspeed: " read SPEED echo -n "Please enter the path to the image: " read IMAGE cdrecord -v -eject -cdrecord -v -eject -driveropts=burnfree -dao dev=$DEV speed=$SPEED $IMAGE echo -n "Thank you for using this script. Written by L!Ld4rk." !Download! Name: Brennscript ver.2 [Debianbasierende Distris] Beschreibung: Wie das normale nur es überprüft pb cdrecord installiert ist. ist es nicht der fall wird es nachträglich installiert Author: L!Ld4rk Benutzung: script per ./brennen2.sh starten danach Anweisungen befolgen Code: Code: #!/bin/bash #info echo -n "Welcome to the cdburn Script. Press enter to continue!" read WAYNE #check if cdrecord is install if which "cdrecord" >/dev/null; then echo "cdrecord found!" #configuration of cdrecord echo -n "Please enter the number of your cd recorder (sampel dev=0,1,0): " read DEV echo -n "Please enter the burnspeed: " read SPEED echo -n "Please enter the path to the image: " read IMAGE #burn cdrecord -v -eject -cdrecord -v -eject -driveropts=burnfree -dao dev=$DEV speed=$SPEED $IMAGE #exit echo -n "Thank you for using this script. Written by L!Ld4rk." else echo "cdrecord wasnt found. it will now install by apt" su -c "apt-get install cdrecord" #configuration of cdrecord echo -n "Please enter the number of your cd recorder (sampel dev=0,1,0): " read DEV echo -n "Please enter the burnspeed: " read SPEED echo -n "Please enter the path to the image: " read IMAGE #burn cdrecord -v -eject -cdrecord -v -eject -driveropts=burnfree -dao dev=$DEV speed=$SPEED $IMAGE #exit echo -n "Thank you for using this script. Written by L!Ld4rk." !Download! Name: RarEntpack-Script Beschreibung: Erleichter das Entpacken von *.rar Dateien! Author: L!Ld4rk Benutzung: script per ./unrar.sh starten danach Anweisungen befolgen Code: Code: #!/bin/bash echo -n "Welcome to the unrar script! Please press enter to continue!" read WAYNE echo -n "Please enter the path of your *.rar file: " read RAR echo -n "Please enter the path to extract the file: " read UNRAR unrar e $RAR $UNRAR echo "Thanks for using this script! Written by L!Ld4rk" !Download! + Multi-Zitat Zitieren
#3 13. Oktober 2006 AW: Bash-Scripte Name des Scripts: MKSplitRAR Author: Beginner(Ich) Beschreibung: Erstellt RAR-Split-Archive Benutzung: ./mksplitrar --help Hinweis: Man sollte im Verzeichniss der Dateien die man Packt sein, weil es sonst den ganzen Verzeichnissbaum zu den Dateien im Archiv abbildet, ich werd das mal beheben wenn ich zuviel Zeit hab Code:: Code: #mksplitrar #!/bin/s set -- `getopt "echg:o:p:" "$@"` output="x" grose="x" while : do case "$1" in -h) help=1;; -c) dc=1;; -e) ein=1;; -o) shift; output="$1" ;; -g) shift; grose="$1";; -p) shift; pw="$1";; --) break ;; esac shift done shift files=$* hilfe () { echo echo "MkSplit ist ein Script zum erstellen gesplitteten Rar-Archiven." echo echo "Syntax:" echo echo "mksplitrar -o [Archiv.rar] -g [Größe der gesplitteten Dateien] Dateien" echo echo "Optionen:" echo echo "-h Help" echo echo "-o Zieldatei z.B -o Test.rar " echo echo "-g Größe der gesplitteten Dateien in Mb z.B. -g 15" echo echo "-p Setzt ein Passwort z.B. -p geheim" echo echo "-c Nur in verbindung von -p, verschlüsselt die Dateinamen." echo "Noch ein Beispiel:" echo echo "mksplitrar -o test.rar -g 5 -p geheim -c bild1.jpg bild2.jpg " echo echo "Erzeugt 5 Mb große Splitarchiven in denen bild1.jpg und bild2.jpg enthalten sind die Datein werden erst nach Eingabe des Passworts geheim sichtbar." echo } if [ "$help" = 1 ] then hilfe exit 0 fi if [ "$ein" = 1 ] then echo Bitte Zielarchiv eingeben: read output echo Bitte Splitarchivgröße in Mb angegen: read grose echo "Passwort setzen? ( j oder n )" read pw1 if [ "$pw1" = "j" ] then echo Passwort eingeben read pw echo "Dateinamen verschlüsseln? ( j oder n )" read dc1 if [ "$dc1" = "j" ] then dc=1 fi fi fi if [ "$output" = "x" ] then echo Kein Ausgabearchiv angegeben! hilfe exit 1 elif [ "$*" = "0" ] then echo Keine Dateien zum packen angegeben hilfe exit 1 fi echo ZielRar: $output echo Zu packende Dateien: $files echo Größe pro .part-Datei: $grose MB if [ "$grose" = "0" ] then grose = 15 fi #mio="1000000" size=$(expr "$grose" \* 1048576) echo $size if [ "$pw" != "" ] then if [ "$dc" = "1" ] then rar a -v"$size"b -m0 -hp$pw $output $files else rar a -v"$size"b -m0 -p$pw $output $files fi else rar a -v"$size"b -m0 $output $files fi #echo Created with mksplitrar >mksplitrar #rar c $output <mksplitrar #rm mksplitrar echo Alle Aufgaben beendet. echo Passwort: $pw exit 0 + Multi-Zitat Zitieren
#4 10. Dezember 2006 AW: Bash-Scripte Name des Scripts: yourPEG Author: dutziman Beschreibung: Bennent JPEG-Bilder einheitlich, komprimiert sie und erstellt Thumbnails. Benutzung: ./yourpeg <verzeichnis> Code: Code: #!/bin/bash echo "creating thumbnail directory _thumbnails_$1" mkdir _thumbnails_$1 echo "going into $1..." cd $1 for dir in *; do if [ -d "$dir" ] then echo "-- going into $1/$dir..." cd "$dir" echo "-- creating thumbnail directory _thumbnails_$1/$dir..." mkdir ../../_thumbnails_$1/$dir i=1; for file in *; do if [[ "$file" =~ "\.[jJ][pP][eE]?[gG]$" ]] then echo "-- -- renaming $file to $dir-$i.jpg" mv "$file" "$dir-$i.jpg" echo "-- -- -- compressing $dir-$i.jpg to 80% quality..." /usr/bin/convert -quality 80% "$dir-$i.jpg" "$dir-$i.jpg" echo "-- -- -- creating thumbnail for $dir-$i.jpg..." /usr/bin/convert -quality 90% -thumbnail 180 "$dir-$i.jpg" "../../_thumbnails_$1/$dir/$dir-$i.jpg" else echo "-- -- omitting $file: not a jpeg image fi i=$((i+1)); done echo "-- leaving $1/$dir..." cd .. else echo "-- omitting $dir: not a directory" fi done echo "leaving $1..." cd .. + Multi-Zitat Zitieren
#5 4. Februar 2007 AW: Bash-Scripte Name des Scripts: nscan v0.1 Author: Crack02 Beschreibung: primitiver textbasierender nachbau von grimps ping und grimps companion in einem Benutzung: ./script ist frühes alphastadium und noch recht verbuggt, aber soweit funktionstüchtig. benötig wird busybox, nmap und ftp-upload Code: #!/bin/bash # Usage if [ -z $1 ] then echo "Usage: $0 {target specification}" echo "TARGET SPECIFICATION:" echo "Can pass hostnames, IP addresses, networks, etc." echo "Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254" exit fi # Ordner in /tmp erstellen #rm -rf /tmp/nscan mkdir /tmp/nscan >> /dev/null # Scan echo "Starting Scan on: $1" nmap -p21 -oG /tmp/nscan/.ftpraw $1 > /dev/null # ip war ok? quittest=`cat /tmp/nscan/.ftpraw|wc -l` if [ $quittest -le 2 ] then exit 0 fi # Auswertung cat /tmp/nscan/.ftpraw |grep open|awk {'print $1 $2'}|sed -e 's/Host:/ /' |grep -n ' '|sed -e 's/:/ :/' > /tmp/nscan/.ftpclean ftpall=`cat /tmp/nscan/.ftpclean |wc -l` i='0' ftp='0' echo "Scan complete. Starting test" # datei erzeugen dd if=/dev/urandom of=/tmp/nscan/.testdatei bs=1k count=1 while [ $i -le $ftpall ] do i=`expr $i + 1` cat /tmp/nscan/.ftpclean |grep "$i :"|grep -m 1 ' ' > /tmp/nscan/.ftp_aktuell cat /tmp/nscan/.ftp_aktuell |sed -e "s/$i : //" > /tmp/nscan/.ftp_toscan ftp=`cat /tmp/nscan/.ftp_toscan` ftp-upload -v --ignore-quit-failure -h $ftp /tmp/nscan/.testdatei done + Multi-Zitat Zitieren
#6 8. Februar 2007 AW: Bash-Scripte Name des Scripts: Bug-Scanner Author: Muschelsuppe Beschreibung: Ähnlich Triton - Eine Liste mit Seiten wird nach einem bestimmten Bug abgesucht. Netcat muss installiert sein. Benutzung: ./scanner.sh internetseiten.txt Code: Code: #!/bin/bash FILE='/something/bug.php' GOOD='Iam a GOOOOOD Key' while read LINE; do OUTPUT=`printf 'GET '$FILE' HTTP/1.0\n\n' | nc -w 5 ${LINE} 80 | grep $GOOD` if [ "$OUTPUT" != "" ] then echo ${LINE}: $OUTPUT fi done < $1 + Multi-Zitat Zitieren
#7 3. Oktober 2007 AW: Bash-Scripte Name des Scripts: mpc2mp3 Author: Bernie Beschreibung: konvertiert mpc nach mp3 Benutzung: ./mpc2mp3 FILE [FILE...] Benoetigt: lame (LAME MP3 Encoder) und mppdec (Musepack) Code: Code: #!/bin/bash ################################################ # Convert alle given Files from mpc 2 mp3 # # Author: Bernie # # Date: 10.07.2005 # ################################################ #configuration (better high bitrate because mpc already suxx) BITRATE=256 #check usage if [ $# -lt 1 ]; then echo "USAGE: $0 FILE [FILE...]"; fi #loop through the arguments while ! [ -z "$1" ]; do #debug #echo "$1" #omit directories if [ -d "$1" -o "$1" = "" ]; then continue fi #check if we have an mpc (stupid file, so we try a bit hex) H_FIRSTLINE=`hexdump -c "$1" | head -n 1 | tr -d ' ' | sed s/0000000//g` #debug #echo "$H_FIRSTLINE" #now check if this first line matches mpc and convert or don't if echo "$H_FIRSTLINE" | grep -q '^MP+\\a'; then echo "Converting $1" #in my world all mpc files end with .mpc, mp3s with .mp3 NEWNAME=`echo "$1" | sed 's/\.mpc$//g'` NEWNAME="$NEWNAME.mp3" #now convert (und halt die :sprachlos:) mppdec --silent "$1" - | lame --quiet -b $BITRATE - "$NEWNAME" else echo "Omitting non-mpc file $1" fi #next one shift done + Multi-Zitat Zitieren
#8 6. Januar 2008 AW: Bash-Scripte Name des Scripts: audioconv v0.2 Author: antisystem Beschreibung: konvertiert audiodateien in das gewünschte format Benutzung: chmod +x und nach /usr/bin kopieren (oder symlink erstellen) Benoetigt: mplayer und die jeweiligen codecs (siehe code) Sonstiges: das script ist bei weitem noch nicht fertig, es funktioniert aber alles. ich werde versuchen noch mehr formate miteinzubeziehen, eine abfrage zur bitrate und evtl. eine übernahme der tags zu ermöglichen. Updates werden sofort eingearbeitet. Code: #!/bin/bash # (c) 2008 antisystem@jabber.org # simple bash script for audio-converting using mplayer # converts audiofiles in the current dir to a specific output format # depends on mplayer, lame, oggenc, flac, faac, mppenc # # tag-info support: wip for s in *.*; do file=`echo "$s"|tail --bytes=4`; done case "$file" in "wma") source="wma" ;; "mp3") source="mp3" ;; "ogg") source="ogg" ;; "lac") source="flac" ;; "aac") source="aac" ;; "m4a") source="m4a" ;; "mp4") source="mp4" ;; "ape") source="ape" ;; "mpc") source="mpc" ;; *) echo "unsupported source file" exit 0 ;; esac echo echo "Source file is $source" echo PS3='Choose output-file format: ' echo select output in "mp3" "ogg" "flac" "aac" "m4a" "mpc" do case "$output" in "mp3") for i in *.$source; do neuername=`echo "$i"|sed -e 's/'$source'$/'$output'/'`; echo "$i -> $neuername"; mplayer -ao pcm:fast "$i"; lame -m j -h --vbr-new -b 192 "audiodump.wav" -o "$neuername"; done rm "audiodump.wav" ;; "ogg") for i in *.$source; do neuername=`echo "$i"|sed -e 's/'$source'$/'$output'/'`; echo "$i -> $neuername"; mplayer -ao pcm:fast "$i"; oggenc -q 5 "audiodump.wav" -o "$neuername"; done rm "audiodump.wav" ;; "flac") for i in *.$source; do neuername=`echo "$i"|sed -e 's/'$source'$/'$output'/'`; echo "$i -> $neuername"; mplayer -ao pcm:fast "$i"; flac -5 "audiodump.wav" -o "$neuername"; done rm "audiodump.wav" ;; "aac") for i in *.$source; do neuername=`echo "$i"|sed -e 's/'$source'$/'$output'/'`; echo "$i -> $neuername"; mplayer -ao pcm:fast "$i"; faac -q 100 "audiodump.wav" -o "$neuername"; done rm "audiodump.wav" ;; "m4a") for i in *.$source; do neuername=`echo "$i"|sed -e 's/'$source'$/'$output'/'`; echo "$i -> $neuername"; mplayer -ao pcm:fast "$i"; faac -q 100 -w "audiodump.wav" -o "$neuername"; done rm "audiodump.wav" ;; "mpc") for i in *.$source; do neuername=`echo "$i"|sed -e 's/'$source'$/'$output'/'`; echo "$i -> $neuername"; mplayer -ao pcm:fast "$i"; mppenc --xtreme "audiodump.wav" "$neuername"; done rm "audiodump.wav" ;; esac break done echo "Delete source file?" echo echo "[y]es, [n]o" read delete case "$delete" in "y") rm -v "$i" ;; "n") ;; esac exit 1 + Multi-Zitat Zitieren
#9 31. Januar 2008 AW: Bash-Scripte Name des Scripts: background_script Author: Bernie Beschreibung: wechselt den Background nach der Urzeit Benutzung: ./background_script Benoetigt: gnome Code: Code: date=`date +%H` if [ 7 -lt $date -a 11 -gt $date ]; then gconftool-2 -s /desktop/gnome/background/picture_filename <pfad zum Bild> -t string elif [ 10 -lt $date -a 17 -gt $date ]; then gconftool-2 -s /desktop/gnome/background/picture_filename <pfad> -t string elif [ 16 -gt $date -a 22 -gt $date ]; then gconftool-2 -s /desktop/gnome/background/picture_filename <pfad> -t string else gconftool-2 -s /desktop/gnome/background/picture_filename <pfad> -t string fi Das ist natürlich nur ein Anhaltspunkt. Man kann das beliebig aufbohren auf Wochentage, Monate, die Zeitintervalle ändern... MfG bernie + Multi-Zitat Zitieren
#10 29. Februar 2008 AW: Bash-Scripte Name des Scripts: dsl Author: E-qualizer Beschreibung: Ermöglicht Neuverbindung nach einer Zwangstrennung des ISP Das war mein erster Versuch ein "sinvolles" Skript zu schreiben, also seit bitte nachsichtig mit meiner Syntax ;-) Benutzung: Backgroundskript Code: Code: #!/bin/bash Z=0 until [ "$Z" -ge 5 ] do if ping -c 1 (z.B. IP von T-Online...) then echo "+ online +" sleep 60s else if ping -c 1 (z.B. IP von Google..) then echo "+ online +" sleep 60s else echo "+ offline +" rcnetwork restart sleep 60s fi fi done + Multi-Zitat Zitieren
#11 24. Dezember 2008 AW: Bash-Scripte Hier ist nichts neues, mach ich mal was Kann alles selbst abgeändert werden. Ich benutz dieses Script meist für xChat Name des Scripts: now playing Author: Bibba Beschreibung: now playing Anzeige für MacOsX Benutzung: ./Name Code: Apple-Script Code: tell application "iTunes" set AlbumName to album of current track set ArtistName to artist of current track set Titel to name of current track set np to "np:" & ArtistName & " - " & Titel & " (" & AlbumName & " min) end tell Code: Bash-Script Code: #!/bin/bash osascript *PFAD*/nowplaying.scpt + Multi-Zitat Zitieren
#12 20. Januar 2010 AW: Bash-Scripte Name des Scripts: makesfv Author: Shir Khan Beschreibung: Erstellt für rar-Splitarchive (benannt nach dem Schema archiv.rar, archiv.r00, archiv.r01, archiv.r02, ... usw.) eine sfv-Datei, die dann archiv.sfv heißt und im selben Verzeichnis wie die Archive liegt. Benötigt: Das Programm cfv (Bei Ubuntu '$ sudo apt-get install cfv', bei Debian '# apt-get install cfv' Benutzung: ./makesfv.sh (oder wie auch immer ihr das Skript nennt) Code: Code: #/bin/bash dir="" echo "Bitte das Verzeichnis mit den Archiven angeben:" while true do read dir if [ -d "${dir}" ]; then echo "Angegebenes Verzeichnis: "${dir}"" break else echo "Verzeichnis '"${dir}"' existiert nicht. Bitte existierendes Verzeichnis eingeben!" fi done cd "${dir}" if ls | grep .rar > /dev/null; then for i in *.rar do file=$(echo "${i}" | cut -d "." -f1) echo -e "\nGefundenes rar-Archiv: "${i}"" echo "Erstelle "${file}".sfv :" echo "cfv -C -f "${file}.sfv" "${file}.*"" cfv -C -f "${file}".sfv "${file}".* echo "$(tail --lines=+3 "${file}".sfv)" > "${file}".sfv done else echo "Keine rar-Archive gefunden!" echo "Beende!" fi + Multi-Zitat Zitieren
#13 17. Februar 2010 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Bash-Scripte Name des Scripts: SFT-Loader Author: coach Beschreibung: Startet den SFT-Loader Benutzung: ./Name sft-datei.sft Code: #!/bin/sh LEECHER=[COLOR="Red"]/pfad/zur/leecher.exe[/COLOR] cd "`dirname "$1"`" WINEDEBUG="-all" wine $LEECHER `basename "$1"` dazu am besten unter /usr/share/applications/ eine .desktop-datei anlegen mit folgendem inhalt: Code: [Desktop Entry] Encoding=UTF-8 Name=SFT-Loader Exec=[COLOR="Red"]pfad-und-name-des-scripts[/COLOR] MimeType=application/x-application-sft; Icon=[COLOR="Red"]euer-icon-mit-pfad[/COLOR] Terminal=false Type=Application Categories=Application;Network; StartupNotify=false und als icon könnt ihr das nehmen...mfg coach PS: am besten das script in /usr/bin und das icon unter /usr/share/icons packen;-) wenn ihr die sft-dateien damit verknüpft, sollte der sft-loader wie unter windows die datei sofort öffnen PPS: achja, es ist kein mechanismus eingebaut um zu erkennen, ob eine datei mit übergeben wurde. wenn dem nicht so ist, sagt der load 'datei nicht gefunden' und schmiert (bie mir zumindest) ab^^ EDIT: und bevor ichs vergesse: sollte auch mit jeglichen sonderzeichen im pfad zurechtkommen;-) + Multi-Zitat Zitieren
#14 18. Januar 2011 AW: Bash-Scripte Name des Scripts: SouthParkDumper Author: DonW33d0 Beschreibung: speichert den RTMP-Stream von southpark.de auf der Festplatte und erzeugt eine mkv Datei. Benutzung: ./script.sh [Staffel] [Episode] | Zahlen müssen immer 2stellig sein also "01" anstatt "1". Code: Anmerkung: Ich habe dieses Script quick&dirty letzte Nacht aus einer Laune raus geschrieben also bitte kein geflame über die Form. Welche Programme werden vorrausgesetzt: - ffmpeg - rtmpdump - mkvmerge Viel Spass damit oder auch nicht + Multi-Zitat Zitieren
#15 8. September 2011 AW: Bash-Scripte Name des Scripts: Uploaded.to Downloader Author: Crack02 Beschreibung: Ein einfaches Skript um einen oder mehrere Links von Uploaded.to Premium zu saugen. Größeres Update: Multithreading hinzugefügt. Fürs Auge isses noch nix, weil die Wartemeldungen sich häufen und zwischen drin wget seine Rückmeldungen reinquetscht, aber es erfüllt seinen Zweck. Am besten in einer screen Shell laufen lassen. Solche Skripte gibt es natürlich noch andere im Web. Das Problem bei allen war, dass wget oder curl beim Download der Datei einen falschen Namen gegeben haben. Anstelle von 123456.rar hieß die datei fghuehw, was dem Downloadlink bei Uploaded entspricht. Da man wget nicht direkt verklickern konnte, dass der richtige Dateinamen im HTTP Header übertragen wird, wird jetzt vor dem eigentlichen Download selber erstmal "ausgekundschaftet" (mit spider), um den Dateinamen aus dem Header abgreifen zu können. Dieser wird dann an den eigentlichen Download an wget übergeben und die Datei mit dem richtigen Namen gespeichert. Features: Bei Erstnutzung werden die Logindaten für den Premium Account abgefragt und in einem Cookie hinterlegt, welches bei weiterer Nutzung erkannt wird. Das Skript erkennt die drei Linkvarianten von uploaded (ul.to/123456, uploaded.to/file/123456 und uploaded.to/file/123456/123456.txt) Ein einzelner Downloadlink kann als Parameter übergeben werden, mehrere Downloadlinks können aus einer einfachen Textdatei ausgelesen werden. Es fehlen noch eine Hand voll Sicherheitsabfragen für ungültige Downloadlinks oder falsche Premium-Daten, d.h. die eingegebenen Daten sowie die Links sollten gültig und online sein, da das Skript sonst abkackt oder zu spinnen anfängt. Wurde ergänzt. Wget muss installiert sein. Was vielleicht demnächst noch dazu kommt: Multi-Threading bei Nutzung einer Linkliste. Skipfunktion für lokal bereits Vorhandene Dateien. Benutzung: Code: Usage with single download link: ./uploaded.download.sh http://uploaded.to/file/123456 or http://ul.to/123456 or http://uploaded.to/file/123456/123456.txt For multiple download links, put them in a text file: ./uploaded.download.sh links.txt Code: #!/usr/local/bin/bash # by Crack02 @ RR Board # Hier die maximale Anzahl an parallelen Downloads angeben. Standard = 5 vorgabe=5 ## Ab hier nichts mehr ändern. # Exit Trap :mad:it() { echo "" echo "CTRL+C detected. Cleaning /tmp and killing downloads..." echo "" wgets=`ps |grep wget|wc -l` echo "Killing `echo $wgets` wget processes" killall wget rm /tmp/*wget.log rm /tmp/zaehler kill $zaehlerpid echo "Done and exit." exit 0 } trap :mad:it SIGINT SIGTERM # COOKIE ERSTELLEN if [ ! -f ~/.ulcookie.txt ] then echo "No cookie has been detected. Creating one for you." echo -n "Enter your uploaded.to user id: " read ulid echo -n "Enter your Uploaded.to password: " read ulpw wget --save-cookies ~/.ulcookie.txt --post-data "id=$ulid&pw=$ulpw" http://uploaded.to/io/login echo "Cookie written to ~/.ulcookie.txt" rm login fi # HILFE if [ -z $1 ] then echo "Usage with single download link: $0 http://uploaded.to/file/123456" echo "or http://ul.to/123456" echo "or http://uploaded.to/file/123456/123456.txt" echo "For multiple download links, put them in a text file: $0 links.txt" exit 0 fi # Einige Tests und Abfragen type wget > /dev/null 2>&1 if [ ! $? = 0 ]; then echo "wget not found! Cant continue without wget. Exiting." exit 1 fi if [ ! -w $PWD ]; then echo "`pwd` is not writeable. Check permissions. Exiting." exit 1 fi # Zufälligen Wget Log generieren und whoami anfüttern. wgetlog=`echo $RANDOM`.wget.log whoami=`whoami` # LINKCHECKER linkcheck() { #cleanup logsda=`ls /tmp |grep .wget.log` if [ -z $logsda ]; then echo "" else rm /tmp/*.wget.log fi if [[ ! $1 =~ ^http\://(uploaded\.to/file|ul\.to)/[a-zA-Z0-9]+ ]]; then return 9 fi wget -S --spider --load-cookies ~/.ulcookie.txt $1 -o /tmp/$wgetlog filedown=`cat /tmp/$wgetlog|grep "404 Not Found"` accdown=`cat /tmp/$wgetlog|grep "recursion is disabled"` if [[ ! -z $filedown ]]; then return 8 fi if [[ ! -z $accdown ]]; then return 7 fi } # Überwachung auf laufende Downloads zaehlermachen() { if [ -z /tmp/zaehler ]; then touch /tmp/zaehler fi while [[ 1 == 1 ]] do zaehler=`ps -u | grep wget | grep $whoami | wc -l` echo $zaehler > /tmp/zaehler sleep 1 done } zaehlermachen $vorgabe & zaehlerpid=`echo $!` # Parallelen Download aus Datei if [ -f $1 ] then echo "Loading from links in file..." echo "Max Threads = `echo $vorgabe`" for i in `cat $1` do linkcheck $i returnvalue=`echo $?` if [[ $returnvalue = 0 ]]; then echo "Current threads: `echo $zaehler`" while [[ `cat /tmp/zaehler` -ge $vorgabe ]] do echo "Maximum threads reached. Awaiting downloads to finish..." sleep 2 done echo "Grabbing filename from server..." filename=`cat /tmp/$wgetlog|grep filename= |awk -F "\"" '{ print $2 }'` echo "Filename found: $filename. Downloading..." wget --progress=bar:force -nv --load-cookies ~/.ulcookie.txt -O "$filename" $i & else case $returnvalue in 7 ) echo "Login data invalid or server problem. Retrying after other downloads have been finished." echo $i >> /tmp/retry;; 8 ) echo "Link seems to be down. Skipping...";; 9 ) echo "Link regex seems to be invalid. Skipping...";; esac fi done # Fehlgeschlagene Downloads erneut versuchen. if [ -f /tmp/retry ] then echo "Found retry file. Retrying those..." for i in `cat /tmp/retry` do linkcheck $i returnvalue=`echo $?` if [[ $returnvalue = 0 ]]; then echo "Current threads: `echo $zaehler`" while [[ `cat /tmp/zaehler` -ge $vorgabe ]] do echo "Maximum threads reached. Awaiting downloads to finish..." sleep 1 done echo "Grabbing filename from server..." filename=`cat /tmp/$wgetlog|grep filename= |awk -F "\"" '{ print $2 }'` echo "Filename found: $filename. Downloading..." wget --progress=bar:force -nv --load-cookies ~/.ulcookie.txt -O "$filename" $i & else case $returnvalue in 7 ) echo "`echo $i` seems to be still :mad:ed up. Will write this link to /tmp/skipped" echo $i >> /tmp/skipped;; 8 ) echo "Link seems to be down. Skipping...";; 9 ) echo "Link regex seems to be invalid. Skipping...";; esac fi done fi echo "Last download has been started in the background." echo "There are still `echo $zaehler` wget threads running. Wget will yell if they are finished." echo "Exiting" # Download einzelner Link else linkcheck $1 returnvalue=`echo $?` if [[ $returnvalue = 0 ]]; then if [ -z $2 ]; then echo "grabbing filename from server..." filename=`cat /tmp/$wgetlog|grep filename= |awk -F "\"" '{ print $2 }'` echo "Filename found: $filename. Downloading..." else filename=`echo $2` echo "Using $2 as filename." fi wget --progress=bar:force --load-cookies ~/.ulcookie.txt -O "$filename" $1 else case $returnvalue in 7 ) echo "Login data invalid or Server problem. Try again.";; 8 ) echo "Link seems to be down.";; 9 ) echo "Link regex seems to be invalid or if you selected a file it does not exist.";; esac fi fi # Downloadüberwachung beenden kill $zaehlerpid rm /tmp/zaehler if [ -f /tmp/retry ]; then rm /tmp/retry fi # Falls Links wegen Fehlern übersprungen wurden, zeige diese an. if [ -f /tmp/skipped ]; then echo "" echo "skipped links:" echo "" cat /tmp/skipped echo "" echo "You can find these links in /tmp/skipped too." fi exit 0 Bekannte Probleme: Manchmal kommt der Fehler "Login data invalid or Server problem.". Das Problem ist, dass über wget nicht genau diffierenziert werden kann, ob die Logindaten falsch sind oder der Server gerade ein Problem hat. Im Zweifelsfall die "defekten" versuchen neu zu laden. Möglicherweise defekte Downloads werden jetzt einer Datei gespeichert und am Ende erneut geladen. Falls diese auch fehlschlägt, bekommt man am Ende eine Liste aller potentiell kaputten Downloads. Ggf. den Interpreter anpassen. Die meisten Linux-Distros verwenden #!/bin/bash Danke an Cable für seine Regex-Hilfe + Multi-Zitat Zitieren