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

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

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

Inlägg 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)
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Alleinsora
Inlägg: 378
Blev medlem: 24 maj 2007, 01:53
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalmar/Luleå
Kontakt:

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

Inlägg 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.
Hur jag än gör så slutar det alltid med E17 på netbooken....
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

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

Inlägg 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
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

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

Inlägg 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/
Alleinsora
Inlägg: 378
Blev medlem: 24 maj 2007, 01:53
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalmar/Luleå
Kontakt:

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

Inlägg 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!
Hur jag än gör så slutar det alltid med E17 på netbooken....
Användarvisningsbild
BadOmen
Inlägg: 1172
Blev medlem: 18 aug 2006, 10:45
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Umeå

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

Inlägg 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
Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Alleinsora
Inlägg: 378
Blev medlem: 24 maj 2007, 01:53
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalmar/Luleå
Kontakt:

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

Inlägg av Alleinsora »

Tackar! Skriptet blev mycket bättre nu!
Hur jag än gör så slutar det alltid med E17 på netbooken....
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

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

Inlägg 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..?
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

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

Inlägg 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

ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
BadOmen
Inlägg: 1172
Blev medlem: 18 aug 2006, 10:45
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Umeå

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

Inlägg 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.
Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

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

Inlägg 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
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
BadOmen
Inlägg: 1172
Blev medlem: 18 aug 2006, 10:45
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Umeå

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

Inlägg 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
Senast redigerad av 1 BadOmen, redigerad totalt 23 gånger.
Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

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

Inlägg av dmz »

http://mywiki.wooledge.org/ParsingLs

prename 's/\.JPG$/\.jpg/g' *.JPG
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
BadOmen
Inlägg: 1172
Blev medlem: 18 aug 2006, 10:45
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Umeå

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

Inlägg 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) :)
Senast redigerad av 1 BadOmen, redigerad totalt 4 gånger.
Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Användarvisningsbild
uppsalanet
Fadder
Inlägg: 257
Blev medlem: 29 sep 2008, 22:05
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Uppsala

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

Inlägg 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
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

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

Inlägg 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))
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

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

Inlägg 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.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

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

Inlägg 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. :-[
Användarvisningsbild
uppsalanet
Fadder
Inlägg: 257
Blev medlem: 29 sep 2008, 22:05
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Uppsala

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

Inlägg 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
Skriv svar

Återgå till "Terminalforum"