Sida 5 av 5

Re: Dela med dig av dina egna script/*sh-tips

Postat: 15 apr 2010, 14:19
av dmz
Jag vill ha mer aktivitet här.

diff klarar inte bara vanliga filer, utan också directories.
Både recursive och enbart per namn. Detta kan då användas för att rensa duplikerad data, t.ex;

Kod: Markera allt

rm -r $(for x in /mnt/Music_{1,2};do for a in {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,VA,X,Y,Z}; do diff -i /mnt/Music_3/$a $x/$a; done|grep -v Only|awk '{print $3}'; done)

Re: Dela med dig av dina egna script/*sh-tips

Postat: 15 apr 2010, 18:41
av Alleinsora
Har ett litet nautillus-skript jag brukar köra för att skapa bilder att publicera på webben.

Kod: Markera allt

#!/bin/bash
## A small script to create websized miniatures of all images in a folder.
## By: Alleinsora

base=”`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d’/’ -f3- | sed ’s/%20/ /g’`”

if $(which convert) == "";
    zenity --error --text="Imagemagick är inte installerat! \nVar vänlig och installera för att använda scriptet"
    exit 1
fi
{
mkdir mindre

for file in *.JPG *.jpg *.PNG *.png
do 
  convert $file -resize 1000x1000 mindre/$file
done
} |
zenity --progress --title="skapar mindre bilder" --text="Skapar mapp med mindre bilder i"
Visserligen skapar skriptet förstoringar om någon bild har ett mått som är mindre än 1000px, men bilder man tar med kameran är ju ändå betydligt större.

Re: Dela med dig av dina egna script/*sh-tips

Postat: 16 apr 2010, 08:05
av dmz
@Alleinsora; Om ett program inte finns i $PATH så får du ändå output; att jämföra med en tom sträng är kanske inte så lyckat då. :)
Du vill kanske använda flaggan -p till mkdir för att förhindra onödig output där mkdir klagar på att dir redan existerar.

Här är något jag hackade ihop till det ovan för att kunna använda dels som bookmarking, dels som ett sätt att hitta url's man har tappat bort.

Bild

Re: Dela med dig av dina egna script/*sh-tips

Postat: 16 apr 2010, 09:47
av rylleman
Jag använder bash/nautilus-scripts ganska mycket i mitt arbete där de flesta är inriktade på bild och video.
Här hittar ni en samling av mina scripts:
http://rylanderanimation.se/tag/nautilus/

Re: Dela med dig av dina egna script/*sh-tips

Postat: 16 apr 2010, 11:36
av Alleinsora
dmz skrev:@Alleinsora; Om ett program inte finns i $PATH så får du ändå output; att jämföra med en tom sträng är kanske inte så lyckat då. :)
Du vill kanske använda flaggan -p till mkdir för att förhindra onödig output där mkdir klagar på att dir redan existerar.
Hm, sant. Kanske skulle köra med $((convert -version)) istället så ser ju skriptet om det gick att starta imagemagick.
Flaggan -p var ett bra tips!

Re: Dela med dig av dina egna script/*sh-tips

Postat: 16 apr 2010, 15:51
av BadOmen
Alleinsora skrev:Har ett litet nautillus-skript jag brukar köra för att skapa bilder att publicera på webben.

Kod: Markera allt

#!/bin/bash
## A small script to create websized miniatures of all images in a folder.
## By: Alleinsora

base=”`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d’/’ -f3- | sed ’s/%20/ /g’`”

if $(which convert) == "";
    zenity --error --text="Imagemagick är inte installerat! \nVar vänlig och installera för att använda scriptet"
    exit 1
fi
{
mkdir mindre

for file in *.JPG *.jpg *.PNG *.png
do 
  convert $file -resize 1000x1000 mindre/$file
done
} |
zenity --progress --title="skapar mindre bilder" --text="Skapar mapp med mindre bilder i"
Visserligen skapar skriptet förstoringar om någon bild har ett mått som är mindre än 1000px, men bilder man tar med kameran är ju ändå betydligt större.
Jag hittade det här kommandot när jag läste på lite om convert, kanske det kan vara till nytta.

Kod: Markera allt

convert -size 1000x1000 $file -resize 1000x1000 mindre/$file
Jag gjorde ett litet test på en bild som var 3872x2592 bildpunkter och här har du resultatet:
Med Size satt till 1000x1000
time convert -size 1000x1000 DSC_3983.JPG -resize 1000x1000 thumbnail.jpg
real 0m1.748s
user 0m1.588s
sys 0m0.100s
och utan size.
time convert DSC_3983.JPG -resize 1000x1000 thumbnail2.jpg
real 0m3.541s
user 0m3.164s
sys 0m0.232s
och om du inte är intreserad av ICM, EXIF, IPTC, mm så kan du få ned filstorleken lite med det här kommandot, det tar dock lite längre tid.
convert -size 1000x1000 DSC_3983.JPG -resize 1000x1000 +profile '*' thumbnail.jpg

Filen blev med EXIF m.m. 281,8 KB och utan blev den 217,8 KB.

Du kan läsa om det på länken nedan om du är intresserad att veta mer:
http://linux.about.com/od/commands/l/bl ... onvert.htm

Re: Dela med dig av dina egna script/*sh-tips

Postat: 19 apr 2010, 01:01
av Alleinsora
Tackar! Skriptet blev mycket bättre nu!

Re: Dela med dig av dina egna script/*sh-tips

Postat: 19 apr 2010, 06:59
av Osprey
dmz skrev:
if $(which convert) == "";
Om ett program inte finns i $PATH så får du ändå output; att jämföra med en tom sträng är kanske inte så lyckat då.
Visserligen är jag lite yrvaken, men vad menar du att which ger för output för kommandon som inte finns (i $PATH)..?
Om jag matar in outputen i "od" så får jag bara nollor (dvs. null (tom sträng)) på kommandon som inte finns...

Vad är det jag har missat..?

Re: Dela med dig av dina egna script/*sh-tips

Postat: 19 apr 2010, 14:05
av dmz
Tack för det... jag borde ha provat i bash också. :p
zsh;

Kod: Markera allt

> foo=$(which foobar)
> echo $foo
foobar not found
bash;

Kod: Markera allt

$ foo=$(which foobar)
which: no foobar in (/home/scp1/bin:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin/perlbin/site:/usr/bin/perlbin/vendor:/usr/bin/perlbin/core)
 echo $foo


Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 maj 2010, 20:33
av BadOmen
Den här enkla kombinationen kör jag nån gång då och då. Den kör igång moc(music on console) och börjar spela musik efter i det här fallet 1 timma och 30 minuter. Man kan använda den som påminnelse för nåt man måste lämna datorn för eller som veckarklocka om man vill. :)

Kod: Markera allt

sleep 1h 30m;mocp -p
Moc startas som server här så man ser inte att den är igång men man hör det... Skriv mocp för att den ska visa sig och där efter shift q för att den ska stänga av sig.

Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 jun 2010, 07:54
av dmz
Varför finns det ingen möjlighet att formatera output av ls med -printf?

Kod: Markera allt

find "$@" -printf "\033[38;5;172m%M\033[38;5;104m %TY-%Tm-%Td\033[0m ▎ \033[38;5;100m%d\033[38;5;197m%y\033[0m ▎ %f\033[38;5;190m ->\033[0m(\033[38;5;166m%.20P\033[0m) \n"
Bild

Re: Dela med dig av dina egna script/*sh-tips

Postat: 22 sep 2010, 23:15
av BadOmen
Edit:OBS! Detta fungerar inte om det är mellanskag i namnet. Se inlläg nedan.

Byter ut filändelsen .JPG för alla filer i mappen man är i till .jpg

Först kollar man vilka filer som påverkas:

Kod: Markera allt

for filnamn in `ls *.JPG`; do echo ${filnamn/.JPG/.jpg};done
Sedna kan man göra ändringen ifall allt ser bra ut.

Kod: Markera allt

for filnamn in `ls *.JPG`; do mv $filnamn ${filnamn/.JPG/.jpg};done

Re: Dela med dig av dina egna script/*sh-tips

Postat: 23 sep 2010, 01:07
av dmz
http://mywiki.wooledge.org/ParsingLs

prename 's/\.JPG$/\.jpg/g' *.JPG

Re: Dela med dig av dina egna script/*sh-tips

Postat: 23 sep 2010, 11:40
av BadOmen
dmz skrev:http://mywiki.wooledge.org/ParsingLs

prename 's/\.JPG$/\.jpg/g' *.JPG
Det hade jag missat :)
Jag har bara kört mitt skript i en mapp utan mellanslag och med filnamn skapade av min kamera så jag har inte stött på några problem som tur är.

Ditt lilla kommando var betydligt mindre och dessutom säkrare :)

EDIT: Lägger till -n så att man kan se vilka filer som komer att ändras och hur dom ändras utan att ändringen genomförs.

Kod: Markera allt

prename -n 's/\.JPG$/\.jpg/g' *.JPG
EDIT2:
Okej, det här är inte ett kortare kommando... men det bygger på min grundtanke och det verkar fungera även med mellanrum i namnen.

Kod: Markera allt

for filnamn in *.JPG; do mv -v ./"$filnamn" ./"${filnamn/.JPG/.jpg}";done
Om man vill se hur det ändras och hur mv kommer att hantera filer med mellanslag så kan man köra denna:

Kod: Markera allt

for filnamn in *.JPG; do filnamn=./"${filnamn// /\\ }"; echo "$filnamn" '->' "${filnamn/.JPG/.jpg}";done
Om inte annat så kan man se det som ett exempel på hur man kan hantera variabler i bash (vilket är vad jag egentligen håller på med) :)

Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 okt 2010, 19:46
av uppsalanet
Min topp tio är for loopen, ex.:

Kod: Markera allt

for i in `ls`; do
md5sum $i
done
Kan kombineras med det mesta.

Kod: Markera allt

for i in `grep -li "fras"`; do
awk -F"|" '{print $2 }' $i >> /tmp/$$.tmp
done

Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 okt 2010, 20:03
av mcNisse
Jag använder inte ` för att köra program. Det går ju inte att nästla ... :(

Så här skulle min loop se ut

Kod: Markera allt

for i in $(ls); do md5sum $i; done
Har dessutom börjat räkna med $(()) konstruktionen, tex echo $((5 % 2))

Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 okt 2010, 21:07
av Konservburk
@uppsalanet och @mcNisse

Ta en titt på länken som dmz postade ett par inlägg upp. Konstruktioner som for i in `ls` och for i in $(ls) är att betrakta som en dödssynd. De bör istället skrivas som for i in * för att fungera bra i alla lägen.

När ni sen ska använda själva variabeln så måste ni se upp lite. Det finns risk för att filnamnen innehåller konstiga tecken som mellanrum eller att de börjar med bindesstreck, vilket kan ställa till det ordentligt. Det går att undvika alla dessa problem genom att ha dubbelfnuttar runt variabeln och ./ (eller dubbla bindesstreck) framför.

Så här ska det se ut:

Kod: Markera allt

for i in *
do md5sum ./"$i"
done
Men i just det här fallet med md5sum så är hela for-kostruktionen överflödig så länge det inte rör sig om väldigt många filer i samma katalog. Jag skulle nöjt mig med detta:

Kod: Markera allt

md5sum -- *
Sen går det faktiskt att nästla ` med hjälp av backslash för den som verkligen vill. Men $() blir förstås mer lättläst.

Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 okt 2010, 21:31
av mcNisse
@Konservburk

Det var en mycket dåligt exempel jag tog. Jag ville egentligen bara pusha för $() för att köra kommandon. :-[

Re: Dela med dig av dina egna script/*sh-tips

Postat: 04 okt 2010, 21:56
av uppsalanet
Jepp Konservburk, du har helt rätt. Man ska aldrig slarva med "", det får man ofta synda för i slutändan.

Jag tackar för tillrättavisningen, på riktigt :)
//Fredrik