• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Allgemeiner Skript Thread

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
Postet hier hilfreiche Skripte, welche den GNU/Linux Alltag erleichtern :coffee:
Natürlich können auch Projekte gepostet werden, an welchen ihr gerade Arbeitet, oder bei denen ihr Hilfe benötigt.

--- [2016-07-11 09:59 CEST] Automatisch zusammengeführter Beitrag ---

Ich arbeite zurzeit an einem Bash Skript zur Installation von Arch Linux, da Arch über keinen Installationsmanager verfügt und ich mich mit Bash ein wenig auseinandersetzen wollte.
Der Code sieht wie folgt aus:
[src=bash]#!/bin/bash
function pause(){
read -p "$*" #pause
}

function step(){
echo " " #make the script look less ugly
}

function yesno(){
response=$?

case $response in
0) #yes
;;
1) #no
exit;;
255) #esc key
exit
esac
}

###### partition names ######
name[1]="boot"
name[2]="root"
name[3]="swap"

B[1]="MiB"
B[2]="GiB"
B[3]="GiB"
B[4]="GiB"


x="/dev/sda"
i=1 #counter

#pacman -Sy dialog #enable if dialog is not already installed in the live-version

loadkeys de_CH-latin1 #swiss layout
clear

#search for disks in /dev/sd*
for i in {1..6}
do
disc[$i]=$(ls $x)
clear
if [[ $x == '/dev/sda' ]]
then
x="/dev/sdb"

elif [[ $x == '/dev/sdb' ]]
then
x="/dev/sdc"

elif [[ $x == '/dev/sdc' ]]
then
x="/dev/sdd"

elif [[ $x == '/dev/sdd' ]]
then
x="/dev/sdx"
fi
done
echo "########## Arch Installation Script ##########"
step
echo "Welcome to the installation of arch linux"
step
pause "Press [Enter] to start..."

step
echo "discs:"
step
lsblk #list all discs
pause "Choose the disc where arch should be installed and press [Enter]..."

exec 3>&1
select_disc=$(dialog --title "Select disc" \
--radiolist "select disc where arch should be installed" \
30 50 10 \
"${disc[1]}" "" "" \
"${disc[2]}" "" "" \
"${disc[3]}" "" "" \
"${disc[4]}" "" "" \
"${disc[5]}" "" "" \
"${disc[6]}" "" "" \
3>&1 1>&2 2>&3 3>&- ) #gets all discs at /dev/sd.. and saves the chosen disc as $select_disc
yesno
clear

dialog --title "Warning" \
--yesno "This will erase all data on the disc. Are you sure?" \
10 40
yesno

exec 3>&1
i=1
while [ $i -le 3 ]
do
size[$i]=$(dialog --title ${name[$i]} \
--inputbox "Select the size of the ${name[$i]} partition ( ${B[$i]} )" \
10 40 "" \
3>&1 1>&2 2>&3 3>&- ) #set the disc sizes
echo ${size[$i]}
yesno

i=$(( $i + 1 ))
done
size_area[1]=$(( ${size[1]} / 1000 ))
size_area[2]=$(( ${size_area[1]} + ${size[2]} ))
size_area[3]=$(( ${size_area[2]} + ${size[3]} ))

parted $select_disc mklabel msdos;
parted $select_disc mkpart primary ext4 1MiB ${size[1]}MiB;
parted $select_disc set 1 boot on;
parted $select_disc mkpart primary ext4 ${size[1]}MiB ${size_area[2]}GiB;
parted $select_disc mkpart primary linux-swap ${size_area[2]}GiB ${size_area[3]}GiB;
parted $select_disc mkpart primary ext4 ${size_area[3]}GiB 100%;

fdisk -l
pause

mkfs.ext4 "${select_disc}1"
mkfs.ext4 "${select_disc}2"
mkswap "${select_disc}3"
mkfs.ext4 "${select_disc}4"

swapon "${select_disc}3"

mount "${select_disc}2" /mnt
mkdir -p /mnt/boot
mkdir -p /mnt/home
mount "${select_disc}1" /boot
mount "${select_disc}4" /home

pacstrap -i /mnt base base-devel

genfstab -U /mnt > /mnt/etc/fstab

echo "select_disc=${select_disc}" > selected_disc.txt
mv selected_disc.txt /mnt/temp/

## create a bash script with the second part of the installation in the chroot ##
echo '
#!/bin/bash

function pause(){
read -p "$*" #pause
}

function step(){
echo " " #make the script look less ugly
}

select_disc=$(cat "/temp/selected_disc.txt")

echo "${select_disc}"
pause "You are in the installed System now. Press [Enter]"
vi /etc/locale.gen
locale-gen

pause "Press [Enter]"

ln -sf /usr/share/zoneinfo/CET /etc/localtime #change time to CET
date
pause "check date"

pacman -S --noconfirm grub os-prober
pacman -S --noconfirm dialog
pacman -S --noconfirm networkmanager
pacman -S --noconfirm gnome-keyring
pacman -Syu --noconfirm

grub-install --recheck "${select_disc}"
pause "check 1"

grub-mkconfig -o /boot/grub/grub.cfg
pause "check 2"

systemctl enable dhcpcd

pause "check 3"

exit
' > chroot.sh
mv chroot.sh /mnt/bin/
chmod +x /mnt/bin/chroot.sh

arch-chroot /mnt /bin/chroot.sh #chroot into the installed system and run the second script


[/src]
Leider funktioniert das Skript noch nicht und der Code ist vermutlich auch nicht besonders gut. Deshalb bin ich froh um Verbesserungsvorschläge und sonstige Tipps :T
 
Zuletzt bearbeitet:

tux

NGBler

Registriert
24 Aug. 2013
Beiträge
238
Ort
München
Vielleicht nicht so spannend, aber manchmal stellt sich Linux mit einem automatischen Mount von Festplatten etwas seltsam an.
Vor allem, wenn die Festplatte an einer Fritzbox hängt und man diese als eine Art WLAN Festplatte in sein Dateisystem mounten möchte.
Nachfolgendes Script mounted mir die an der Fritzbox hängende Platte sowie zwei separate Verzeichnisse. Als Authentifizierung habe ich ein credential file verwendet.

Code:
sudo mount -t cifs //192.168.178.1/<Devicename> ~/ExtPlatte -o credentials=/home/<Benutzer>/.smbcredentials
sudo mount -t cifs //192.168.178.1/<Devicename>/Musik ~/Musik -o credentials=/home/<Benutzer>/.smbcredentials
sudo mount -t cifs //192.168.178.1/<Devicename>/Filme ~/Videos -o credentials=/home/<Benutzer>/.smbcredentials

Unmount:
Code:
sudo umount ~/ExtPlatte
sudo umount ~/Musik
sudo umount ~/Videos
 

mathmos

404

Registriert
14 Juli 2013
Beiträge
4.415
@AN00BIS:

Schau dich mal im Arch-Forum um. Da gab es schon das eine oder andere Installations-Script. Eventuell kannst du dir da etwas abschauen.

---

Leider sind meine Scripte in der Regel recht speziell (hauptsächlich Datenbanksachen) bzw. zu sehr mit der heißen Nadel gestrickt als dass ich sie hier veröffentlichen werde. Von daher nur mal drei Stück. Wobei zwei ein Einzeiler sind.

Verschlüsselte Datenbanksicherung mit Dropbox-Uploader in eine Dropbox laden

[src=bash]#!/bin/bash
set -e
DAY=`/bin/date +%Y%m%d`
PASSPHRASE='strenggeheim'
mysqldump -u benutzername -p'4567' datenbankname | gzip -9 > /home/benutzername/Dropbox-Uploader/$DAY.sql.gz
gpg --batch --cipher-algo AES256 --passphrase=$PASSPHRASE -c /home/benutzername/Dropbox-Uploader/$DAY.sql.gz
cd /home/benutzername/Dropbox-Uploader/
./dropbox_uploader.sh upload "$DAY.sql.gz.gpg" .
rm /home/benutzername/Dropbox-Uploader/$DAY.sql.gz
rm /home/benutzername/Dropbox-Uploader/$DAY.sql.gz.gpg[/src]

Rechte von Dateien und Verzeichnissen als Oktalzahl anzeigen (anstelle von .zsh gibt man das gewünschte Verzeichnis an)

[src=bash]find .zsh -printf "%m %p\n"[/src]

Datei mit IP-Adressen sortieren und doppelte Einträge entfernen

[src=bash]cat unsortiert.txt | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 | uniq >> sortiert.txt[/src]
 

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
  • Thread Starter Thread Starter
  • #5
Es wird bereits eine separate Home Partition als sd_4 erstellt. Diese nimmt dann einfach den restlichen Speicher welcher noch verfügbar ist :)
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Ich schreibe seltener Scripts (zu faul), sondern eher oneliner.

Löscht die Steam-Libraries, damit die Linux-eigenen verwendet werden (mehr Performance, bugfixes):

[src=bash]#!/bin/sh
find ~/.local/share/Steam/ \( -name "libgcc_s.so*" -o -name "libstdc++.so*" -o -name "libxcb.so*" -o -name "libgpg-error.so*" \) -print -delete[/src]

Gibt die Anzahl der verfügbaren Spiele für Linux auf Steam aus:

[src=python]#!/usr/bin/python3
from lxml import html
import requests
gamecount = int(html.fromstring(requests.get('https://steamdb.info/linux/').content).xpath('//nav[@class="tabnav-tabs"]/*/span[@class="counter"]/text()')[0].replace(',',''))
print(gamecount)
[/src]

Klickt ganz oft (nützlich für Klicker-Spiele, gegen RSI):

[src=bash]#!/bin/sh
repcount=$((RANDOM % 100))
delaycount=$((RANDOM % 10 * 10 + 30))
notify-send "Repeat: $repcount, delay: $delaycount"
xdotool click --repeat $repcount --delay $delaycount 1
notify-send "finished!"
tput bel[/src]

Manche nützlichen oneliner findet man auch auf http://www.commandlinefu.com.

Mit [kw]arandr[/kw] kann man sich auch Scripts generieren, die die verfügbaren Anzeigen umschalten. Habe mehrere Multimonitor-Layouts, die ich per Tastendruck einstellen kann.
 
Zuletzt bearbeitet:

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
  • Thread Starter Thread Starter
  • #7
Hier noch ein Bash Script, welches ich für MAC-Spoofing in öffentlichen Netzwerken geschrieben habe:

[src=bash]#!/bin/bash

function generate(){
hexdump -v -n 1 -e '1/1 "%02x"' /dev/urandom
}
function yesno(){
echo -n "Do you want to spoof the mac address? y/n : "
read YnAnswer

YnAnswer=$(echo $YnAnswer | awk '{print tolower($0)}')

case $YnAnswer in
"y") spoof ;;
"n") exit ;;
*) echo "please answer y/n" ; echo "" ; yesno;;
esac

}
function spoof(){
for i in {1..5}
do
number[$i]=$(generate)
done

macadd="${startnr}:${number[1]}:${number[2]}:${number[3]}:${number[4]}:${number[5]}"
ifconfig $dev down
ifconfig $dev hw ether $macadd
ifconfig $dev up
echo ""
echo "--- the new mac address is: ---"
echo " ${macadd}"
echo ""
}

dev="wlp3s0" #set your network device
startnr="10" #define the first part of the mac address

yesno
[/src]
Es generiert eine zufällige MAC-Adresse. Diese wird logischerweise nach einem Neustart wieder zurückgesetzt.
 

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
  • Thread Starter Thread Starter
  • #9
@phre4k:
OK. Das funktioniert natürlich besser als mein Skript
Da habe ich es wohl umsonst geschrieben. Schade wars :D
Danke für den Trick :beer:
 

Chris89

Neu angemeldet

Registriert
31 Juli 2016
Beiträge
22
Kleines Debian/Ubuntu update script.

apt-get update && apt-get upgrade -y && apt-get clean && apt-get autoremove -y
 

Gelöschtes Mitglied 1550

Guest

G
Einfaches Skript, um ein File auf mehrere Ziele zu kopieren (per scp):

[src=bash]#!/bin/bash
DESTINATIONS=(server1.example.org server2.example.org)
FILE2COPY=$1
PATH2COPY=$2

if [ -z "$1" ]; then
echo "Bitte zu kopierende Datei angeben"
exit 1
fi

if [ -z "$2" ]; then
echo "Bitte Pfad angeben"
exit 1
fi

for host in "${DESTINATIONS[@]}"; do
scp "$FILE2COPY" "$host":"$PATH2COPY"
done[/src]

Skript, um die Rechte einer Wordpress-Installation korrekt zu setzen:

[src=bash]#!/bin/bash
WEBSERVER_USER=www-data
WEBSERVER_GROUP=www-data
WP_ROOT=$1
if [ -z "$1" ]
then
echo "Bitte WordPress-Document Root angeben!"
exit 1
fi
# Standardberechtigungen setzen
find ${WP_ROOT} -exec chown ${WEBSERVER_USER}:${WEBSERVER_GROUP} {} \;
find ${WP_ROOT} -type d -exec chmod 755 {} \;
find ${WP_ROOT} -type f -exec chmod 644 {} \;
# Zugriff auf wp-config.php erlauben, aber den Rest aussperren
chgrp ${WEBSERVER_GROUP} ${WP_ROOT}/wp-config.php
chmod 660 ${WP_ROOT}/wp-config.php
# Zugriff auf .htaccess erlauben
touch ${WP_ROOT}/.htaccess
chgrp ${WEBSERVER_GROUP} ${WP_ROOT}/.htaccess
chmod 664 ${WP_ROOT}/.htaccess
# Zugriff auf wp-content erlauben
find ${WP_ROOT}/wp-content -exec chgrp ${WEBSERVER_GROUP} {} \;
find ${WP_ROOT}/wp-content -type d -exec chmod 775 {} \;
find ${WP_ROOT}/wp-content -type f -exec chmod 664 {} \;[/src]
 

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
  • Thread Starter Thread Starter
  • #12
Da ich Agenda Programme nicht besonders mag, habe ich mir ein Bash Skript dafür geschrieben.
Nun schreibe ich meine Termine in ein einfaches Textfile und das Skript schickt mir dann einen Reminder für alle Termine, welche in den nächsten 5 Tagen stattfinden.
Das Ganze habe ich dann mit Crontab kombiniert.

Skript:[src=bash]#!/bin/bash
path=/path/to/textfile.txt
for i in {0..5}
do
date=$(date +%d.%m.%Y -d "+$i days")
task=$(grep $date $path)

if ! [[ -z $task ]]
then
notify-send "$task"
fi
done[/src]

Die Textdatei sieht übrigens so aus:
[src=text]September:
- Erdhörnchen jagen 17.09.2016
- Training 21.09.2016
- Bomben bauen 24.09.2016

Oktober:
- Einhorn suchen 01.10.2016
- Windows deinstallieren 16.10.2016
- Banane 22.10.2016[/src]
 
Zuletzt bearbeitet:

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
gaming-mode.sh – erhöht zum Spielen die Helligkeit meines Monitors und setzt die Farbtemperatur zur besseren Sichtbarkeit der Gegner auf 5500K (Tageslichttemperatur).

[src=bash]#!/bin/bash

if pgrep "redshift-gtk" > /dev/null
then mode="e" # enable
else mode="d" # disable
fi

case $mode in
e)
killall redshift-gtk
ddccontrol -r 0x10 -w 20 dev:/dev/i2c-10
sleep 1
redshift -O 5500K
#xrandr --output DisplayPort-2 --brightness 1.5
sleep 1
ddccontrol -r 0x10 -w 35 dev:/dev/i2c-10
;;
d)
redshift-gtk&
ddccontrol -r 0x10 -w 5 dev:/dev/i2c-10
;;
esac[/src]

Dafür muss allerdings das setuid-Bit bei ddccontrol gesetzt sein, wenn man das als normaler User machen will.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Okay, kein Skript, aber ich denke das wird dem ein oder anderen vielleicht auch hilfreich sein:
Konfigurationsdateien von Paketen löschen die bereits deinstalliert sind, aber Überbleibsel im System haben (Debian + dpkg).

Terminal (Bash):
#Ausgabeliste von "dpkg --list" mit "grep" nach "rc" filtern, mit "awk" das zweite Argument (Pakentnamen) in "$x" speichern
x=$(dpkg --list | grep ^rc| awk '{ print $2}')

# Nur wenn man diese anzeigen lassen will, hier "$x" ausgeben
echo "$x"

#Pakete und Reste mit "apt" entfernen die sich in "$x" finden mittels "--purge" und "remove"
apt --purge remove $x

Quelle (hier bezog es sich auf Kernel Images...:
https://www.cyberciti.biz/faq/debian-ubuntu-linux-delete-old-kernel-images-command/

Und die Codes für die Ausgabe der Paketstatusse ist hier nachzulesen:
https://linuxprograms.wordpress.com/2010/05/11/status-dpkg-list/

Hier die Liste für die "Ewigkeit", Quelle aus dem Blog (bezieht sich auf die Ausgabe von dpkg:
Beispiel: "dpkg --list" Ausgabe

[src=text]....
ii xserver-xorg-video-amdgpu 1.2.0-1+b1 amd64 X.Org X server -- AMDGPU display driver
....
[/src]

Status ist hier "ii" für "xserver-xorg-video-amdgpu"

The first column corresponds to the status of a package. How to interpret this status.
Status of every package is represented by three characters xxx

Let’s explore each of the character signify.

First character: The possible value for the first character. The first character signifies the desired state, like we (or some user) is marking the package for installation

u: Unknown (an unknown state)
i: Install (marked for installation)
r: Remove (marked for removal)
p: Purge (marked for purging)
h: Hold

Second Character: The second character signifies the current state, whether it is installed or not. The possible values are

n: Not- The package is not installed
i: Inst – The package is successfully installed
c: Cfg-files – Configuration files are present
u: Unpacked- The package is stilled unpacked
f: Failed-cfg- Failed to remove configuration files
h: Half-inst- The package is only partially installed
W: trig-aWait
t: Trig-pend

Let’s move to the third character
Third Character: This corresponds to the error state. The possible value include

R: Reinst-required The package must be installed.
 
Zuletzt bearbeitet:

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
  • Thread Starter Thread Starter
  • #16
@Cazawhi: Sowohl als auch ^^
Ob das für einen sinnvoll ist kann man selbst entscheiden.
Ich schreib mir nur sehr selten Temine auf und für die vielleicht 1-3 Dinge im Monat die ich aufschreibe, reicht das allemal.
 

mathmos

404

Registriert
14 Juli 2013
Beiträge
4.415
[src=python]#! python
# Emails in einer Datei finden und Treffer in eine neue Datei schreiben

import os
import re

quelldatei = 'test.txt'
zieldatei = 'ergebnis.txt'

if os.path.exists(quelldatei):
daten = open(quelldatei,'r')
emaildatei = daten.read()
else:
print("Datei nicht gefunden")
raise SystemExit


# Regex und Suche ohne doppelte Treffer
emailregex = re.compile(r'[a-z0-9!#$%&*+=?^_`{|}~-]+(?:\.[a-z0-9!#$%&*+=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?',re.IGNORECASE)
trefferdoppelt = emailregex.findall(emaildatei)
treffereinfach = set(trefferdoppelt)

# Treffer ausgeben und in Datei schreiben
with open(zieldatei, 'w') as f:
for row in treffereinfach:
print (row)
f.write("%s\n" % str(row))[/src]

Das Script sucht in der angegbenen Quelldatei nach E-Mail-Adressen und filtert doppelte Treffer. Die restlichen Treffer werden dann ausgegeben und in die angegebene Zieldatei geschrieben. Eine Validierung der Adressen erfolgt hierbei nicht.
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Steam Sale – nur die totalen Tiefstpreise anzeigen:

1. steamdb.info/sales/ aufrufen.
2. Suchkriterien festlegen und Filter anwenden.
3. Mehrmals runterscrollen und die Liste vollständig aufklappen (Show other deals) um alle verbleibenden Spiele anzeigen zu lassen.
4. F12 drücken bzw. Konsole öffnen.
5. Folgendes Javascript kopieren, in die Konsole einfügen und Eingabe drücken:

[src=javascript]javascript:$('tbody tr:not(:has(td.price-discount-major))').remove()[/src]

Jetzt bekommt man nur noch die blauen Angebote (= bisherige Tiefstpreise im Steam Store) angezeigt. Am Besten erst später versuchen wenn steamdb die gesamte update queue durch hat.
 

Cazawhi

Geht ein

Registriert
13 Feb. 2016
Beiträge
357
Ort
im Funkloch
Ich weiß, der Thread ist ein bisschen älter, aber das konnte ich der weiten Welt nicht vorenthalten:
Ein Youtube-dl-Skript! (Benötigte Programme: Youtube-dl, mp3info, ffmpeg)
Ist nicht oberste Sahne aber erfüllt seinen Zweck.
[src=bash]#!/bin/bash

#=========================Description============================================================#
# This script is for pulling a playlist on youtube or a video in mp3 format.


#=========================Stringlist=============================================================#

# Path to youtube-dl
YTDLPATH="youtube-dl"

# Path for a cache to place music files temporarly
PATHCACHE="/hier/ist/ein/temporärer/ordner"

# Timeout Socket (depending on your Internet)
TIMEOUT="30"


#=========================Init===================================================================#

echo "[cazamusic] Welcome to Cazawhi-Music-Getter, yo";

# Update youtube-dl
echo "Checking for Updates...";
$YTDLPATH -U

# Creating cache for downloaded files
echo "[cazamusic] Creating RAM..";
mkdir "$PATHCACHE"
cd "$PATHCACHE"


#=========================User Gotrough==========================================================#

#Ask for URL
echo "[cazamusic] Type Video URL...";
read URL

# Ask for destination
echo "[cazamusic] Destination Playlist name?";
read DESTINATION
# Check if destination is present
if [ -d "$DESTINATION" ]
then
echo "";
else
mkdir "$DESTINATION"
echo "[cazamusic] Destination folder created.";
fi

# Ask for Tags
echo "[cazamusic] Do you want Tags? (Y/n)";
read BOOTAGS
if [ "$BOOTAGS" == "n" ]
then
echo "[cazamusic] Ignored Tags..";
else
echo "Artist..";
read ARTIST
echo "Genre..";
read GENRE
echo "Year..";
read YEAR
fi


#=========================Downloading============================================================#

# Ask for playlist
echo "[cazamusic] Do you want to download the playlist? (Y,n)";
read PLTF
if [ "$PLTF" == "n" ]
then
echo "[cazamusic] Starting song download..";
"$YTDLPATH" -i -t --extract-audio --audio-format mp3 --audio-quality 0 --socket-timeout "$TIMEOUT" --console-title --no-playlist "$URL"
else
echo "[cazamusic] Where to start downloading in Playlist?";
read PLSTART
echo "[cazamusic] And where to stop in Playlist?";
read PLEND
# Downloading if playlist is true
"$YTDLPATH" -i -t --extract-audio --audio-format mp3 --audio-quality 0 --socket-timeout "$TIMEOUT" --console-title --yes-playlist --playlist-start "$PLSTART" --playlist-end "$PLEND" "$URL"
fi


#=========================Tags====================================================================#

#Write the Tags for all new added Songs
if [ "$BOOTAGS" == "n"; ]
then
echo "";
else
echo "[cazamusic] Writing given Tags..";
mp3info -a "$ARTIST" $PATHCACHE/*
mp3info -g "$GENRE" $PATHCACHE/*
mp3info -y "$YEAR" $PATHCACHE/*
fi


#=========================Final===================================================================#

echo "[cazamusic] Cleaning RAM";
# Moving Music in destination...
mv "$PATHCACHE"/* "$DESTINATION"
rm -rf $PATHCACHE

cd
echo "[cazamusic] I'm out.";
exit 0[/src]
 

AN00BIS

/dev/comfy

Registriert
25 Feb. 2015
Beiträge
191
Ort
Auf den Dächern
  • Thread Starter Thread Starter
  • #20
Ich habe ein kleines Backupskript in Bash geschrieben:
[src=bash]#!/bin/bash
input=$1
spath= '/source/path/bla/bla'
dpath='/destination/path/bla/bla'

if [ $input == daily ]
then
dpath="$dpath/daily"
rsync -auEhH $spath $dpath
elif [ $input == weekly ]
then
dpath="$dpath/weekly"
rsync -auEhH $spath $dpath
elif [ $input == monthly ]
then
dpath="$dpath/monthly"
rsync -auEhH $spath $dpath
else
echo "error"
fi[/src]
Das Skript wird dann mit crontab wie folgt aufgerufen:
### MONTHLY ###
00 20 1 * * sh /path/to/script/script.sh monthly
### WEEKLY ###
00 20 * * 5 sh /path/to/script/script.sh weekly
### DAILY ###
00 20 * * * sh /path/to/script/script.sh daily

Das Skript funktioniert soweit. Da ich aber nicht oft Bash benutze, gibt es sicher noch Verbesserungspotential und ich wäre froh um eure Tipps :coffee:
 
Oben