Przydatne skrypty

Wyłącznie system! Wątpliwości dotyczące aplikacji proszę umieszczać niżej, w odpowiednich forach.
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: dk75 »

potrzebne czy nie, sprzątanie po sobie jest dobrym zwyczajem

Ja mam /tmp w RAM a i tak kasuję w swoich skryptach wszystko co tam zapisałem
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
Awatar użytkownika
empitt
Przyjaciel
Przyjaciel
Posty: 465
Rejestracja: 16 lis 2007, 13:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: empitt »

Nie bardzo rozumiem czemu robisz takie coś:

Kod: Zaznacz cały

grep 'NO_PUBKEY' /tmp/keye | sed 's/.*NO_PUBKEY //'
skoro wszystko możesz zrobić w sedzie:

Kod: Zaznacz cały

sed -i '/NO_PUBKEY/!d;s/.*NO_PUBKEY //' /tmp/keye
Nie mówię, że zrobiłeś źle, ale tak wygląda ładniej i jeśli można zrobić wszystko przy użyciu jednego polecenia, to na ogół warto wykorzystywać wszystkie jego możliwości (a o sedzie dużo mówić raczej nie trzeba, ponieważ wystarczy zajrzeć do manuala i od razu widać jaka jest z niego potęga).

Oto moja wersja skryptu do pobierania brakujących kluczy:

Kod: Zaznacz cały

#!/bin/bash
echo 'Proszę czekać...'
x=0
while [ $x -ne 2 ]
do
    sudo apt-get update 2> outfile > /dev/null
    sed -i '/NO_PUBKEY/!d;s/.*NO_PUBKEY //' outfile &> /dev/null
    gpg --keyserver 'x-hkp://gpg-keyserver.de' --recv-keys $(cat outfile) &> /dev/null
    gpg --export --armor $(cat outfile) | sudo apt-key add - && echo 'true' > outfile || rm -f outfile
    x=$(( $x + 1 ))
done
if [ -s outfile ]
then
    echo -ne '\nPowiodło się'
    rm -f outfile
else
    echo -ne '\nNie powiodło się'
fi
echo ' (Naciśnij enter, aby zakończyć działanie skryptu)'
read
Inny OS = Fedora
outslider
Sędziwy Jeż
Sędziwy Jeż
Posty: 68
Rejestracja: 03 lis 2007, 23:14
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: outslider »

Ja nie do końca rozumiem, po co to naciskanie Enter na końcu skryptu? I z drobnostek dodałbym w przypadku niepowodzenia zakończenie z jakimś kodem, np. exit 1 czy coś.
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

Ja nie do końca rozumiem, po co to naciskanie Enter na końcu skryptu? I z drobnostek dodałbym w przypadku niepowodzenia zakończenie z jakimś kodem, np. exit 1 czy coś.
Po to, żeby skrypt czekał na użytkownika z informacją "Powiodło się lub nie"

Kto co woli ;)
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
empitt
Przyjaciel
Przyjaciel
Posty: 465
Rejestracja: 16 lis 2007, 13:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: empitt »

outslider pisze:Ja nie do końca rozumiem, po co to naciskanie Enter na końcu skryptu? I z drobnostek dodałbym w przypadku niepowodzenia zakończenie z jakimś kodem, np. exit 1 czy coś.
Jeśli ktoś będzie uruchamiać skrypt standardowo w konsoli, to exit może być, ale jak ktoś będzie odpalać go poprzez dwuklik, to exit wyłączy skrypt i skąd użytkownik będzie wiedział jaki był końcowy wynik? Dlatego w tym przypadku lepiej pasuje read od exit.

EDIT:
Proste polecenie do sprawdzania połączenia z internetem:

Kod: Zaznacz cały

ping -c 1 209.85.129.105 &> /dev/null && echo 'Jest połączenie' || echo 'Brak połączenia'
lub skrypt:

Kod: Zaznacz cały

#!/bin/bash
wget -q -t 10 -T 5 209.85.129.105 -O net
if [ $? != '0' ] ; then
    echo -n 'Brak połączenia'
else
    echo -n 'Jest połączenie'
fi
echo ' (Naciśnij enter, aby zakończyć działanie skryptu)'
rm -f net
read
W obydwu przypadkach efekt końcowy jest taki sam.
Inny OS = Fedora
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

Jeśli ktoś będzie uruchamiać skrypt standardowo w konsoli, to exit może być, ale jak ktoś będzie odpalać go poprzez dwuklik, to exit wyłączy skrypt i skąd użytkownik będzie wiedział jaki był końcowy wynik? Dlatego w tym przypadku lepiej pasuje read od exit.
Nie koniecznie bo wynik zakończenia przechowuje zmienna $?, a wynik ten można przypisać innej zmiennej, a potem się do niej odwołać itd. Nie jest to potrzebne chyba, że ktoś nas o to poprosi bo np. chce wykorzystać nasz skrypt i wywołać go w swoim programie. Jest jeszcze możliwość grupowania poleceń {} lub (), ale i to zależy od programisty jak to wszystko rozwiąże.
Więcej o mnie znajdziesz na: http://ospulse.pl
outslider
Sędziwy Jeż
Sędziwy Jeż
Posty: 68
Rejestracja: 03 lis 2007, 23:14
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: outslider »

Nie chcę robić offtopa, ale:
Jeśli ktoś będzie uruchamiać skrypt standardowo w konsoli, to exit może być, ale jak ktoś będzie odpalać go poprzez dwuklik, to exit wyłączy skrypt i skąd użytkownik będzie wiedział jaki był końcowy wynik? Dlatego w tym przypadku lepiej pasuje read od exit.
Ale jak ktoś odpali przez dwuklik to i tak nie zobaczy, co pokazało echo;p. Mało tego, wtedy nie będzie można wyłączyć skryptu przez klawisz Enter, bo skrypt nie będzie czytał z stdin. Więc to tym gorzej, bo skrypt będzie wisiał w procesach jedyne co robiąc to czekając na Enter, który nie nadejdzie...

A jak będzie z GUI (zenity czy kdialog) to i tak trzeba kliknąć na przycisk, zanim okno zniknie.
Ok, dobra, już się na ten temat nie wypowiadam, bo nie po to wątek.

-----edit-----

żeby nie mnożyć postów nad miarę:

empitt, to znaczy, że u Ciebie po dwukliku pojawia się konsola? U mnie nie, u mnie skrypt uruchomiony dwuklikiem działa w tle. Dlatego napisałem, że nie ma to sensu. Skoro jednak u Ciebie tak to wygląda, to widać bywają sytuacje, gdzie jest to przydatne;p
Awatar użytkownika
empitt
Przyjaciel
Przyjaciel
Posty: 465
Rejestracja: 16 lis 2007, 13:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: empitt »

To w takim bądź razie dlaczego ja widzę, dlaczego u mnie echo wyświetla wynik końcowy, hmm..?
Inny OS = Fedora
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

Rozszerzenie dla Nautilusa, które doda z plików listę repozytoriów

Zacząłem pisać ten prosty skrypt dobre pół roku temu, ale że z sudo działał w postaci jednej linii, a z gksu czy gksudo już nie, to napisałem go w takie postaci jak widzicie.

Główny skrypt

Kod: Zaznacz cały

#!/bin/bash
## REPO ADD 0.3
## Autor: lukas
## Kontakt: luka.poland@gmail.com
## Licencja: GPL v3

OPTIONS=$( zenity --title="Dodaj Repozytorium" --text="Wybierz opcje z poniższej listy" --list --checklist --column="Wybór" --column="Lista opcji" \
	FALSE "Nazwij repozytorium" \
	FALSE "Odśwież listę pakietów" \
	FALSE "Edytuj plik \"sources.list\"" )
	[ "$?" = 1 ] && exit 1

  for REPO_FILE in "$@"
  do

    echo "$OPTIONS" | grep -q "Nazwij repozytorium" \
	&& { REPO_NAME=$( zenity --width=300 --entry --title="Dodaj Repozytorium" --text="Nazwa repozytorium dla \"$REPO_FILE\"" ); DIALOG_NAME="$?"; }
	[ "$DIALOG_NAME" = 1 ] && exit 1

    export REPO_FILE
    export REPO_NAME

    gksu -k "$HOME/.gnome2/nautilus-scripts/.repo_add" ; REPO_ADD=$?

    [ $REPO_ADD = 0 ] \
	&& notify-send -t 2500 -i dialog-apply 'Gotowe' "Repozytorium \"$REPO_NAME\" dodane do listy." \
	|| notify-send -t 2500 -i dialog-warning 'Błąd' 'Coś poszło nie tak.'
   
  done

echo "$OPTIONS" | grep -q "Odśwież listę pakietów" \
	&& gksu apt-get update \
	| zenity --title="Odświeżania listy pakietów" --text="Proszę cierpliwie czekać, może to chwilę potrwać." --progress --pulsate --auto-close

echo "$OPTIONS" | grep -q "Edytuj plik \"sources.list\"" \
	&& gksu gedit /etc/apt/sources.list


Skrypt, któremu exportuję wartość zmiennej z listy

Kod: Zaznacz cały

#!/bin/bash
## REPO ADD 0.3
## Autor: lukas
## Kontakt: luka.poland@gmail.com
## Licencja: GPL v3

echo -e '## Dodane przez rozszerzenie' \"Dodaj Repozytorium\" 'dnia' $(date +%d.%m.%Y) 'o godzinie' $(date +%X) "\n## $REPO_NAME" \
| tee -a /etc/apt/sources.list

sed -e '/^$/d' < "$REPO_FILE" | tee -a  /etc/apt/sources.list
Program Install. Nie chciało mi się inaczej ;)

Kod: Zaznacz cały

#!/bin/bash

for FILE in *
do

   [ "$FILE" != Install ] && [ "$FILE" != README ] \
	&& chmod u+x "$FILE" && cp -p "$FILE" "$HOME/.gnome2/nautilus-scripts" \
	&& echo -e 'Kopiowanie pliku' \""$FILE"\"          '[\E[31m OK \E[0m]' \
	|| echo -e 'Kopiowanie pliku' \""$FILE"\"          '[\E[32m NO \E[0m]'

done
   mv "$HOME/.gnome2/nautilus-scripts/repo_add" "$HOME/.gnome2/nautilus-scripts/.repo_add"
   echo -e '\n\E[31m Jeśli chcesz być informowany o procesie aktualizacji, doinstaluj dymki.\n Możesz to zrobić wpisująć w terminalu:\E[0m  sudo apt-get install libnotify-bin\n'
   read -p 'Naciśnij dowolny klawisz aby zakończyć: '
Video Prezentacja, paczka do pobrania, opis na http://ospulse.pl

30.06.2010
Na stronie znajduje sie wersja 0.2 z kilkoma nowościami + prezentacja video.

08.07.2010
Wersja 0.3 z możliwością edytowania pliku sources.list. Wideo prezentacja + gotowa paczuszka- odsyłam na strone.
Więcej o mnie znajdziesz na: http://ospulse.pl
zwieracz
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 02 maja 2008, 13:37
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przydatne skrypty

Post autor: zwieracz »

Jeśli wkurzają Was "okienkowe" nazwy plików - poniżej skrypcik, który wywołany w danym katalogu (z subdirami) zmienia w nazwach plików duże litery na małe oraz inteligentnie spacje na podkreślenia:

Kod: Zaznacz cały

#!/bin/sh
if [ -n "$1" ]
then
  if [ -d "$1" ] 
    then
        cd "$1"
	  else
	      echo invalid directory
	          exit
		    fi
		    fi
		    
		    for i in *
		    do
		      OLDNAME="$i"
		        NEWNAME=`echo "$i" | tr ' ' '_' | tr A-Z a-z | sed s/_-_/-/g`
			  if [ "$NEWNAME" != "$OLDNAME" ]
			    then
			        TMPNAME="$i"_TMP 
				    echo ""
				        mv -v -- "$OLDNAME" "$TMPNAME"
					    mv -v -- "$TMPNAME" "$NEWNAME"
					      fi
					        if [ -d "$NEWNAME" ] 
						  then
						      echo Recursing lowercase for directory "$NEWNAME"
						          $0 "$NEWNAME"
							    fi
							    done
Drugi bardzo miły dla mnie - zamiana wav na mp3:

Kod: Zaznacz cały

#!/bin/bash
for i in *.wav
do
lame -h -b 192 "$i" "$i.mp3"
done 
... aby nie zostały głupie nazwy plików - usuwamy *wav*:

Kod: Zaznacz cały

#! /bin/sh

for a in *.wav.mp3; do mv $a `basename $a .wav.mp3`.mp3; done
Miziak
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 05 lut 2010, 21:39
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Unity
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: Miziak »

Mam dla was skrypt do conky wszak może bash to nie jest ale pewnie komuś się przyda:

O skrypcie:
Skrypt głównie dla młodzieży szkolnej/studentów!
Od dziś conky podpowie nam jakie lekcje mamy jutro nie będziecie już musieli szukać kartek z planem lekcji!!!
Nie dziwcie się, że skrypt nie działa po instalacji bowiem jest on tak napisany aby nie działał w wakacje oraz soboty, w niedziele działa ponieważ pokazuje plan na poniedziałek!

Wymagania pakiet lua dostępny w repo bodajże:

Kod: Zaznacz cały

sudo apt-get install lua5.1
w miejscu gdzie trzymacie skrypty robicie plik plan.lua i wklejacie do niego to:

Kod: Zaznacz cały

local user = "miziak" --podajemy nazwę naszego użytkownika
local nazwy, dzien, plan = {"poniedzialek", "wtorek", "sroda", "czwartek", "piatek"}, tonumber(os.date("%w"))+1, ""

local bool = false
for line in io.lines("/home/"..user.."/Dokumenty/plan lekcji") do 
	if(line:lower():find(nazwy[dzien]))then
		if(not bool)then
			bool = true
			plan = "Plan na jutro(" .. nazwy[dzien] .. ") to:\n"
		else
			break
		end
	else
		plan = plan .. line .. "\n"
	end
end

print(plan)
oraz w tym samym folderze plik plan.sh i wklejacie do niego:

Kod: Zaznacz cały

#!/bin/bash

jutro=$(date +%w)
jutro=$((($jutro+1)%7))
miesciac=$(date +%m)

if [[ "$miesciac" != "08" && "$miesciac" != "07" ]]
then
if [ "$jutro" != "6" ]
then
echo ""
lua /home/miziak/.skrypty_conky/plan.lua
fi
fi
Teraz w ~/.conkyrc dodajecie linnię:

Kod: Zaznacz cały

${execi 1 ~/.skrypty_conky/plan.sh}
Oczywiście podajecie własną lokację skryptu plan.sh.

Teraz w folderze pod tytułem Dokumenty(jest on na partycji /home) tworzymy zwykły plik i nazywamy go plan lekcji jest to plik konfiguracyjny skryptu wklejasz do niego:
Poniedzialek:
1
2
3
4
5
6
7
8
9
Poniedzialek:
Wtorek:
1
2
3
4
5
6
7
8
9
Wtorek:
Sroda:
1
2
3
4
5
6
7
8
9
Sroda:
Czwartek:
1
2
3
4
5
6
7
8
9
Czwartek:
Piatek:
1
2
3
4
5
6
7
8
9
Piatek:
Między nazwami dni umieszczamy swój plan lekcji nie musi ich być koniecznie 9 może być nawet jedna :)

Kod: Zaznacz cały

local user = "miziak" --podajemy nazwę naszego użytkownika
W tej linijce skryptu lua postępujemy zgodzie z jej opisem :)

Pozdrawiam,
Miziak ;)
schi2m
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 02 wrz 2010, 16:43
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: schi2m »

To i ja od siebie dodam dwa skrypty które właśnie ukończyłem. Oba to skrypty nautilusa.

pierwszy usuwa wszelkie spacje z nazw zaznaczonych plików:

Kod: Zaznacz cały

#!/bin/bash

clear

messages="Wprowadzono następujące modyfikacje:" 

for oldName in "$@"
do

	path="$NAUTILUS_SCRIPT_CURRENT_URI"

	path=${path##file:\/\/}
	
	newName=${oldName//\ /\_}

	if [ "$oldName" != "$newName" ]; then
		messages="${messages}\nmv \"$path/$oldName\" \"$path/$newName\""
		mv "$path/$oldName" "$path/$newName" 
	else	
		messages="${messages}\n$oldName: spacji do wyczyszczenia "
	fi
done

echo -e $messages | zenity --text-info --width 530
drugi czyści nazwy plików tak by nie posiadały znaków "_","%20" i w ich miejsce wstawia spację. Przydatne np. po pobraniu downloadHelperem (wtyczka do firefox) jakiejś mp3 z wrzuty. Wtedy zwykle nazwy plików posiadają przezemnie wcześniej wymienione śmieci.

Kod: Zaznacz cały

#!/bin/bash

clear

messages="Wprowadzono następujące modyfikacje:" 

for oldName in "$@"
do

	path="$NAUTILUS_SCRIPT_CURRENT_URI"

	path=${path##file:\/\/}
	
	newName=${oldName//\_/ }
	newName=${newName//\ \ / }
	newName=${newName//\%20/ }
	newName=${newName//\ \./\.}

	if [ "$oldName" != "$newName" ]; then
		messages="${messages}\nmv \"$path/$oldName\" \"$path/$newName\""
		mv "$path/$oldName" "$path/$newName" 
	else	
		messages="${messages}\n$oldName: spacji do wyczyszczenia "
	fi
done

echo -e $messages | zenity --text-info --width 530

EDIT:
i jeszcze jeden skrypcik. Dodałem go sobie w ubuntu do automatycznego uruchamiania w momencie logowania. Pozwala on na zamontowanie dysków zaszyfrowanych za pomocą true crypt. Oczywiście należy podać swoje opcje montowania (urządzenia, katalogi montowania):

Kod: Zaznacz cały

#! /bin/bash

clear
sudo -k

wynik=""
i=0
while [ "$wynik" = "" ]; do
	
	if [ $i = 3 ]; then 
		exit 1
	fi	

	haslo=$(zenity --entry \
	--title="Podaj hasło root" \
	--text="Podaj hasło root:" \
	--entry-text "" \
	--hide-text)
	
	wynik=$(echo $haslo | sudo -kS ls -al)
	i=$i+1

	if [ "$haslo" = "" ]; then
		anulowac=`zenity --question --text="Nie podałeś hasła, czy chcesz anulować?"; echo $?`
		if [ "$anulowac" = "0" ]; then
			exit 1
		fi
	fi
	
	if [ "$wynik" != "" ]; then
		echo $haslo | sudo -S ls -al 
	fi

done

haslo=$(zenity --entry \
	--title="Podaj hasło trueCrypt" \
	--text="Podaj hasło trueCrypt:" \
	--entry-text "" \
	--hide-text)

sudo truecrypt -d;
sudo truecrypt -p=$haslo /dev/sdb1 /media/truecrypt1
sudo truecrypt -p=$haslo /dev/sda3 /media/truecrypt2

sudo -k
PTH
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 13 maja 2010, 22:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przydatne skrypty

Post autor: PTH »

Skrypt ułatwiający ściąganie np. filmików z youtube
Wykorzystuje to, że podczas oglądania system tworzy plik flashowy w katalogu /tmp
Sprawdza, czy w/tmp jest taki plik, kopiuje go do wybranego katalogu, konwertuje na avi.

Kod: Zaznacz cały

#!/bin/bash
# tmp.sh      data: 13wrz2010     wersja: 0.4
# skrypt wykonujący kopię plików flash z katalogu ~/tmp
if [ -e /tmp/Flash* ]        
	then
	cp  /tmp/Flash* ~/skrypty/tmp_flash/
	cd ~/skrypty/tmp_flash/
	ffmpeg -i Flash* -b 780000 $(date '+%F_%M').avi    # konwertuje na avi (wymaga zainstalowania ffmpeg)
	rm Flash*
	echo "plik skopiowany"
else
	echo "brak pliku do skopiowania"
fi
outslider
Sędziwy Jeż
Sędziwy Jeż
Posty: 68
Rejestracja: 03 lis 2007, 23:14
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: outslider »

Dobre, PTH, chciałem coś takiego zmontować, ale nie wiedziałem, że kopia filmu jest w /tmp, myślałem, że tylko w katalogach podręcznych przeglądarek, a tam jest taki bajzel, że nie mogłem wyłuskać sensownie najnowszego filmu:D

Zmieniłbym tylko, żeby output był w katalogu, w którym jest skrypt odpalany:

Kod: Zaznacz cały

#!/bin/bash
# tmp.sh      data: 13wrz2010     wersja: 0.4
# skrypt wykonujący kopię plików flash z katalogu ~/tmp
if [ -e /tmp/Flash* ]        
	then
	cp  /tmp/Flash* .
	ffmpeg -i Flash* -b 780000 $(date '+%F_%M').avi    # konwertuje na avi (wymaga zainstalowania ffmpeg)
	rm Flash*
	echo "plik skopiowany"
else
	echo "brak pliku do skopiowania"
fi
Chyba poprawna modyfikacja? Nie testowałem.
PTH
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 13 maja 2010, 22:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przydatne skrypty

Post autor: PTH »

1. Dzięki za uznanie
2. Oczywiście każdy użytkownik może sobie samodzielnie ustalić do jakiego katalogu skopiuje pliki
3. wprowadzona przez Ciebie modyfikacja kopiuje do ~/home/, więc nie zawsze będzie to ten w którym jest skrypt
outslider
Sędziwy Jeż
Sędziwy Jeż
Posty: 68
Rejestracja: 03 lis 2007, 23:14
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: outslider »

1. Nie ma za co, należało się;)
2. No tak, demokracja jest...
3. Wydaje mi się, że katalog "." oznacza bieżący katalog, więc jak ktoś odpali skrypt z jakiegoś katalogu (cd /katalog; /ścieżka/do/skryptu) to skopiuje do bieżącego, czy się mylę?
4. A, no i użytkownik musi wiedzieć, że skrypt odpalamy po zbuforowaniu pliku! Możnaby dodać sprawdzanie, np. w odstępie 3-4 sek. czy plik jeszcze rośnie, ale to chyba mnożenie bytów ponad miarę...
Awatar użytkownika
kapat
Sędziwy Jeż
Sędziwy Jeż
Posty: 62
Rejestracja: 09 mar 2008, 21:55
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Przydatne skrypty

Post autor: kapat »

Aktualizacja: Wednesday, February 23 2011

Wywoływanie.

jpg-cliner.sh - uruchomi GUI zenity
jpg-cliner.sh -c - uruchomi tryb consolowy

Dostępne Opcje:

Kod: Zaznacz cały

USAGE: /media/Nowy/Dokumenty/Programming/Script/Software/jpg-cliner.sh <option> <Source> <Destinity>

-c            Starting in text mode. 
            usage: /media/Nowy/Dokumenty/Programming/Script/Software/jpg-cliner.sh -c <Source> <Destinity>

-q    --quiet        Quiet mode. Does not display any messages

     Author: Tomasz "Kapat" Kapuściarek
      Mail: kapuściarek[at]gmail.com
Skrypt segreguje zdjęcia na bazie JHead tworząc strukturę katalogów

Kod: Zaznacz cały

/home/xxx/zdjecia/2009/01.Styczen/
/home/xxx/zdjecia/2010/04.Kwiecien/
Skrypt jest w wersji rozwojowej, mile widziane sugestie :)

Kod: Zaznacz cały

#! /bin/bash

#################################################################################
# 
### SKRYPT PORZADKUJĄCY ZDJĘCIA NA BAZIE EXIF
# Autor: Kapat
# Mail:     kapusciarek[at]gmail.com
#
################################################################################
# Tablica przechowująca nazwy miesięcy, wykorzystywane do tworzenia katalogów
# Używana przez funkcje createDir
TABLE=(Styczen Luty Marzec Kwiecein Maj Czerwiec Lipiec Sierpien Wrzesien Pazdziernik Listopad Grudzien)

#Domyślne ścieżki prgramów
EXIF="/usr/bin/jhead"

# Separuje z exifa daty 
parseDate() {
    YEAR=$(jhead ${1} | awk '{FS=":"} /Date\/Time/ {print substr($2,2)}')
    MONTH=$(jhead ${1} | awk '{FS=":"} /Date\/Time/ {print $3}')
    DAY=$(jhead ${1} | awk '{FS=":"} /Date\/Time/ {print substr ($4,0,2)}')
}

# Tworzy Katalogi Na bazie Exif
createDir() {
    STRMONTH=${TABLE[$(echo $MONTH | awk '{if (/^0/) print substr ($0,2); else print}')-1]}
    VERBOSE="$1"
    
    if [ -d $destDIR/$YEAR ]
        then
            echo -n
        else
            if [ $VERBOSE -eq '0' ]
                then
                    echo -e "[CR]\\t$destDIR$YEAR"
            fi 
            mkdir $destDIR/$YEAR
    fi
    if [ -d $destDIR/$YEAR/$MONTH.$STRMONTH ]
        then
            echo -n
        else
            if [ $VERBOSE -eq 0 ]
                then
                    echo -e "[CR]\\t$destDIR$YEAR/$MONTH.$STRMONTH"
            fi 
            mkdir $destDIR/$YEAR/$MONTH.$STRMONTH
    fi
}

# Przenosi Plik do katalogu destDIR
mvFiles() {
    PLIK=$(echo ${1} | sed 's/^.*\///g')
    VERBOSE="${2}"
    if [ -e "$destDIR$YEAR/$MONTH.$STRMONTH/$PLIK" ]
        then
            echo -n
        else
            if [ $VERBOSE -eq 0 ]
                then
                    echo -e "[MV]\\t$destDIR$YEAR/$MONTH.$STRMONTH/$PLIK"
            fi 
            mv $1 $destDIR$YEAR/$MONTH.$STRMONTH/
    fi
}    

# Wyświetla Pomoc
Help_MSG () {
    echo
    echo -e "USAGE: $0 <option> <Source> <Destinity>"
    echo
    echo -e "-c\\t\\t\\tStarting in text mode."\
                    "\\n\\t\\t\\tusage: $0 -c <Source> <Destinity>\\n"
    echo -e    "-q\\t--quiet\\t\\tQuiet mode. Does not display any messages\\n"
    echo -e "\\t Author: Tomasz \"Kapat\" Kapuściarek\\n" \
                    "\\t Mail: kapuściarek[at]gmail.com"
}

# Zmienia nazwę plików z dużych na małe litery
Change_Exception() {
    for FILE in $srcDIR*.[jJ][pP][gG]
            do
                if [ $FILE == *.[jJ][pP][gG] ]
                    then
                        break
                    else
                        jhead -n%Y-%m-%d_%H-%M-%S $FILE #>> error.log
                fi
        done
}

# Funkcja Główna wywoływana w MAIN
JPG_clean() {
    for FILES in `ls $srcDIR*.jpg`
        do
            parseDate $FILES
            createDir 0
            mvFiles $FILES 0
        done
}

GUI_getDirectory() {
    
    TITLE="$1"
    DIR=$(zenity --file-selection --directory --title=$TITLE)
    
    case $? in
                 0)
                        ERROR="0";;
                 1)
                        ERROR="1";;
                -1)
                        ERROR="-1";;
    esac
}

### GUI FUNCTION

GUI_ChangeDirectory() {
    GUI_getDirectory "Source"

    if [ $ERROR = "1" ]
        then
          zenity --info --text="\nAnulowanie na życzenie użytkownika.\n"
    elif [ $ERROR = "-1" ]
        then
            zenity --error --text="Zakończenie skryptu nieznany błąd"
        else
            srcDIR="$DIR/"
            GUI_getDirectory "Destinity"
            if [ $ERROR = "1" ]
                then 
                    zenity --info --text="\nAnulowanie na życzenie użytkownika.\n"
                else
                    destDIR="$DIR/"
                    GUI_ProgressBAR
            fi
    fi
}

# Wyświetla Pasek posŧepu przenoszenia plików z katalogu
# Źrudłowego do Docelowego
GUI_ProgressBAR () {
    cd $srcDIR
    
    FileCount=$(ls *.[Jj][Pp][Gg]|wc -l)

    (for FILES in $(ls *.[Jj][Pp][Gg])
        do
            COUNTER=$(ls *.[Jj][Pp][Gg]|wc -l)
            STEP=$(($COUNTER*100/$FileCount))
            
            #Tu jest jakiś błąd z jheadem sptawdzić
            #jhead -n%Y-%m-%d_%H-%M-%S $FILES
            parseDate $FILES
            createDir 1
            mvFiles $FILES 1
            
            # TU Już nie
            
            echo $((100-$STEP))
    done) | zenity --progress --title="Progress" --text="Scanning Pictrue ..." \
          --percentage=0
}


if [ "$1" = "-h" ] || [ "$1" = "--help" ] # Wywołanie okna Pomocy
    then
        Help_MSG
elif [ "$1" = "-c" ]
    then
        srcDIR="$2" # Katalog źródłowy
        destDIR="$3" # Katalog Docelowy
        
        echo -e "SRC: $srcDIR \\t DEST: $destDIR "
        Change_Exception
        JPG_clean
    else
        GUI_ChangeDirectory
fi

Pozdrawiam. Kapat

"Informatyk nie czyta, on przetwarza informacje."
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

@PTH, fajnie gdybyś to w demona zamienił tak, żeby z automata kopiował pobrany obraz video. Tylko, że flash to takie dziadostwo, że nigdy nie wiadomo jak się zachowa i film może być uszkodzony lub niepełny.
możnaby dodać sprawdzanie, np. w odstępie 3-4 sek. czy plik jeszcze rośnie, ale to chyba mnożenie bytów ponad miarę...
O ile buforowanie nie zostanie przerwane bo z tym to każdy wie jak jest ;) Jakby się człowiek nie starał, to i tak będzie źle.
Więcej o mnie znajdziesz na: http://ospulse.pl
PTH
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 13 maja 2010, 22:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przydatne skrypty

Post autor: PTH »

@LuKas: myślałem o tym, ale zrezygnowałem - obawiałem się, że automatyczne ściąganie i konwertowanie każdego pliku zbytnio mi zmuli kompa.
Poza tym nie każdy flv chcę ściągnąć na dysk J
Zastosowałem półśrodek w postaci aliasu 'tmp' - używam go za każdym razem, gdy chcę odpalić mój skrypt
yossarian212
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 01 lis 2009, 10:34
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

pliki youtube w /tmp/

Post autor: yossarian212 »

witam wszystkich bo jestem tu nowy

myslalem i niewymysliem

otoz zawsze jak ogladam cos na youtube to filmiki zapisuja mi sie z /tmp/ jako FlashXX cos tam cos tam

napisalem sktypt ktory kopiuje wszystkie te pkiki do gdziestam

#!/bin/bash
cp /tmp/Flash* /home/p/Pulpit/

ale kopiuje wszystkie, nawet te niedokonczone a chcialbym zeby automatycznie kipiowal dopiero jak sie zassa caly a na youtube czerwony pasek dojdzie do konca,

z gory dzieki

ps, zeby jakas roznica byla miedzy plikami niedokonczonymi i skonczonymi, a tu nic, guzik, oba sa take same, nazwa, rowszezenia wogole niema, tylko data i rozmiar sie rozni

a ja jestem cienki w tych sprawach

milego

pomozecie ?
ODPOWIEDZ

Wróć do „Instalacja, aktualizacja i konfiguracja Ubuntu”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 24 gości