You are hereLinux / bash
bash
mp3's samenvoegen
Recent schreef ik hoe je gemakkelijk een hele nest MP3-bestanden kan downloaden van de StuBru-website.
Vandaag vroeg Lennert mij of het ook mogelijk is om de mp3-files samen te voegen. Ja dat kan, maar helaas niet gewoon met
want dan is er wat mis met de mp3-metadata. Onder andere de lengte van de track wordt niet correct weergegeven.
Ik heb hiervoor 2 tooltjes gevonden: qmp3join (onderdeel van quelcom) en id3cp (onderdeel van libid3-tools).
qmp3joinom de mp3-bestanden samen te voegen, zonder hercoderen. De voorwaarde is wel dat de bitrate van alle files dezelfde is, maar dat is geen probleem bij de verschillende stukken van een zelfde radioprogramma. Mocht dat niet het geval zijn, dan laat qmp3join dit weten en gaat het de files niet samenvoegen. In dat geval moet je zelf een manier zoeken om de mp3-files te recoden naar dezelfde bitrate. De manfiles vanffmpegofmencoderzijn uw vrienden.id3cpom de ID3-tags te kopiëren naar de nieuwe file. De gedownloade files hebben bijvoorbeeld "Studio Brussel" als artiest. De doorqmp3joinsamengevoegde mp3 heeft geen ID3-tags, dus kopieer ik die van de eerste file.
Installeer eerst quelcom en libid3-tools:
Dan de files samenvoegen en de ID3-tags kopiëren:
id3cp 41_111015_switch_uur_1-snip_hi.mp3 TheGreatestSwitch2011.mp3
Dit is het resultaat:
-rw-rw-r-- 1 40M 2011-10-19 00:12 41_111015_switch_uur_1-snip_hi.mp3
-rw-rw-r-- 1 38M 2011-10-19 00:12 41_111015_switch_uur_2-snip_hi.mp3
-rw-rw-r-- 1 37M 2011-10-19 00:12 41_111015_switch_uur_3-snip_hi.mp3
-rw-rw-r-- 1 39M 2011-10-19 00:12 41_111015_switch_uur_4-snip_hi.mp3
-rw-rw-r-- 1 40M 2011-10-19 00:12 41_111015_switch_uur_5-snip_hi.mp3
-rw-rw-r-- 1 40M 2011-10-19 00:12 41_111015_switch_uur_6-snip_hi.mp3
-rw-rw-r-- 1 38M 2011-10-19 00:12 41_111015_switch_uur_7-snip_hi.mp3
-rw-rw-r-- 1 40M 2011-10-19 00:12 41_111015_switch_uur_8-snip_hi.mp3
-rw------- 1 308M 2011-10-19 00:21 TheGreatestSwitch2011.mp3
*** Tag information for TheGreatestSwitch2011.mp3
=== TIT2 (Title/songname/content description): 41_111015_switch_uur_1
=== TPE1 (Lead performer(s)/Soloist(s)): Studio Brussel
=== COMM (Comments): (ID3v1 Comment)[XXX]: 2011-10-15T16:01:34
=== TCON (Content type): (0)
*** mp3 info
MPEG1/layer III
Bitrate: 96KBps
Frequency: 44KHz
The Greatest Switch downloaden met één bash-commando
Typ dit in op één regel (of doe van copypasta) om The Greatest Switch van Studio Brussel binnen te trekken:
Of alternatief, met curl (werkt ook op OS X, met dank aan Joris Timmerman):
Daarna afspelen met
Alstublieft. Ik heb het u weer gemakkelijk gemaakt.
Dit is gemakkelijk aan te passen voor al de andere lange StuBru-uitzendingen die ze online smijten zoals De Zwaarste Lijst. Als je in de source van de webpagina kijkt, dan zie je dat je http://od.mp3.streampower.be/vrt/stubru/41_110423_ZwaarsteShow1-snip_hi.mp3 moet hebben, en dat er 6 delen zijn.
Grep met een kleurtje
Probleem
Je wil naar een bepaalde tekst zoeken in een bestand. Dat doe je met grep. Je wil de gezochte tekst in kleur zien. Dat doe je met grep --color. Maar dan zie je alleen de regels waar de gezochte tekst in staat. Wat als je alle regels wil zien, ook die zonder de gekleurde tekst?
Oplossing
grep --color "pattern|$"
grep gaat zoeken naar alle regels met daarin pattern OF alle regels met een regeleinde ($), waarbij zowel pattern als het regeleinde in kleur worden gezet. Aangezien een regeleinde geen printbaar karakter is, staat er geen kleurtje aan het einde van iedere regel. Maar iedere regel heeft wel een regeleinde, matcht dus met de expressie, en wordt dus getoond.
Ik gebruik dit bijvoorbeeld om mijn maillog in de gaten te houden, als ik email van een bepaalde afzender verwacht:
tail -F /var/log/mail.log | egrep --color=always "afzender|$"
Inbox Zero: munin plugin
Wat voor zin heeft het dat ik Inbox Zero loop te verkondigen als ik het zelf niet in de praktijk breng? Ik zit momenteel met een mesthoop van meer dan 1000 emails.
Om de voortgang van mijn opkuis te zien, heb ik een munin plugin geschreven dat het aantal mails in mijn Inbox maildir telt:
#
# Plugin to monitor Inbox size, for a selected set of users
#
# Usage: Place in /etc/munin/node.d/ (or link it there using ln -s)
# Add this to your /etc/munin/plugin-conf.d/munin-node:
# [inboxzero]
# user root
# env.USERS amedee annette
#
# amedee and annette being a list of the users to monitor.
# You need to also make sure that awk is installed
#
# 2010-10-03 v 1.0 dungheap: first version
#
#
# Parameters understood:
#
# config (required)
# autoconf (optional - used by munin-config)
#
#%# family=manual
#%# capabilities=autoconf
if [ "$1" = "autoconf" ] ; then
if [ -n "$USERS" ] ; then
echo "yes"
else
echo "\$USERS not defined."
fi
exit
fi
if [ "$1" = "config" ] ; then
echo "graph_args --base 1000 --lower-limit 0";
echo "graph_scale no";
echo "graph_title Inbox size, by user";
echo "graph_category mail";
echo "graph_info This graph shows the number of remaing mails in the Inbox, for monitored users.";
echo "graph_vlabel number of mails";
echo "graph_order $USERS";
for USER in $USERS ; do {
echo "${USER}.label ${USER}";
echo "${USER}.type GAUGE";
echo "${USER}.min 0";
}
done;
exit;
fi
for USER in $USERS ; do {
find /home/${USER}/Maildir/???/* 2>/dev/null | wc -l |
awk -v user="$USER" '
BEGIN {
INBOX=0
}
{
INBOX+=$0
}
END {
print user".value", INBOX;
}'
}
done;
Dit geeft als resultaat:




Apropos
Ik heb net een van mijn partities geformatteerd naar een ander bestandssysteem. Zoals we allemaal weten, wijzigt de UUID bij het formatteren. Een aanpassing van /etc/fstab was dus nodig.
Ik was even het commando vergeten waarmee je UUIDs kan oplijsten. Ik zat al in bash dus ik dacht, RTFM: Read The Fantastic Man Pages. Ik typte apropos uuid en ik kreeg het volgende:
Data::UUID (3pm) - OSSP uuid Backward Compatibility Perl Binding
dbus-uuidgen (1) - Utility to generate UUIDs
findfs (8) - Find a filesystem by label or UUID
OSSP::uuid (3pm) - OSSP uuid Perl Binding
UUID (3pm) - Perl extension for using UUID interfaces as defined in e2fsprogs.
uuidd (8) - UUID generation daemon
uuidgen (1) - command-line utility to create a new UUID value
Sorry gasten, maar dat helpt mij niet. Nu was ik verplicht om die geheugenvreter bijgenaamd Firefox op te starten. Ik gebruikte deze query: http://www.google.com/search?q=how+to+find+uuid+of+a+partition. Het eerste resultaat kwam van de Ubuntu Forums en gaf me direct het antwoord dat ik wilde weten: blkid.
/dev/sda1: UUID="cbca999c-ac35-400b-981e-f6521bdce034" TYPE="ext2"
/dev/sda2: UUID="af28U3-nqkc-r7yc-ImXS-Xrgc-jvuk-cBQWiP" TYPE="LVM2_member"
/dev/mapper/lvmvolume-root: UUID="f3eedbc4-fbb0-4ba8-ac36-38d94b2d3aad" TYPE="ext4"
/dev/mapper/lvmvolume-home: UUID="3ca8d92c-c04a-433a-825d-57edc77f014f" TYPE="ext4"
/dev/mapper/lvmvolume-swap: UUID="0b92ab6a-7dfe-40b6-b227-833c9f136204" TYPE="swap"
/dev/mapper/lvmvolume-vm: LABEL="vm" UUID="4779f948-0621-43df-a17d-741d0b44a1a4" TYPE="xfs"
/dev/sdg1: SEC_TYPE="msdos" LABEL="EXT2FSD" UUID="E891-8431" TYPE="vfat"
/dev/sdg2: LABEL="external" UUID="d195e97b-7f5d-41f6-9f55-7761ec569f8a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdh1: UUID="B804-0E83" TYPE="vfat"
/dev/sda3: UUID="00352C6E44CEFA42" TYPE="ntfs"
Waarom [krachtterm weggelaten] toont apropos uuid dat [adjectief verwijderd] blkid commando niet??? Het is echt wel relevant hoor! Als bewijs:
blkid -L label | -U uuid
-U uuid
Look up one device that uses the uuid. For more details see the -L option.
Blijkbaar zoekt apropos alleen maar in de synopsis van commando's, en uiteraard staat "uuid" niet in de synopsis van blkid:
blkid (8) - command-line utility to locate/print block device attributes
WEROEM??? Aaaaaaaaaargggg!!!
Sorry, ik moest even stoom afblazen. De stoomdruk is nu terug onder het kritische niveau gezakt.
Externe url's extracten uit een website
Foto's in batch verkleinen met imagemagick
Gisteren stelde Monica Monté een interessante vraag op Twitter: "Bestaat er een manier om een hoop foto's (+100) in een batch te verkleinen (7mb >1mb) Via Photoshop, Lightroom, Bridge,...?"
Ik vind het een rare vraag omdat bestandsgrootte een ééndimensionaal gegeven is, terwijl foto's eigenlijk 3 dimensies hebben: lengte, breedte en kleurdiepte. Of 2 dimensies, als je alleen van lengte en breedte spreekt, en het aantal kleuren gelijk blijft in je omzetting. Bovendien, bij JPEG-compressie (daar bleek het achteraf inderdaad om te gaan) is het bij een foto waarvan je alleen de lengte en breedte weet, quasi onmogelijk om te voorspellen wat de bestandsgrootte gaat zijn, zonder het jpeg-compressiealgoritme uit te voeren. 2 verschillende foto's maar met exact dezelfde lengte en breedte zullen meestal een verschillende grootte hebben. Soit, Monica moet bij gelegenheid maar eens uitleggen wat ze bedoelde.
Er waren direct een aantal mensen die deze sympathieke fotoredactrice ter hulp snelden met hun advies voor zware softwarepakketten zoals Lightroom (@Jannemans, @mbargo, @bartclaeys, @Schuppe), iPhoto (@boskabout), Photoshop (@broodkast, @kodel, @eyeballkid), Picasa (@raf__) en Irfanview (@vdbvdb). @robindheer zat ook met dezelfde vraag: hoe verklein je foto's in batch?
Maar mensen, waarom allemaal zo moeilijk doen? Zoals ik gisteren al schreef op Twitter: het in batch verkleinen van afbeeldingen is iets waarvoor imagemagick ideaal geschikt is.
Ubuntu beschrijft het als volgt:
Package: imagemagick
Priority: optional
Section: graphics
Installed-Size: 348
Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: ImageMagick Packaging Team <pkg-gmagick-im-team@lists.alioth.debian.org>
Architecture: amd64
Version: 7:6.5.1.0-1.1ubuntu3
Depends: libbz2-1.0, libc6 (>= 2.3.4), libfreetype6 (>= 2.2.1), libgomp1 (>= 4.2.1),
libice6 (>= 1:1.0.0), libjpeg62, liblcms1 (>= 1.15-1), libltdl7 (>= 2.2.6a), libmagickcore2,
libmagickwand2, libsm6, libtiff4, libx11-6, libxext6, libxt6, zlib1g (>= 1:1.1.4)
Suggests: transfig, imagemagick-doc
Filename: pool/main/i/imagemagick/imagemagick_6.5.1.0-1.1ubuntu3_amd64.deb
Size: 95720
MD5sum: 87d33361ab2486f49c8ea077d8933eff
SHA1: b1a0da0347944a35984d40f7f85e94a52d576ae8
SHA256: 431d515a1b033b167f2517382e944ccdc60388bb326dd43adfc1f15a552a8a49
Description: image manipulation programs
ImageMagick is a software suite to create, edit, and compose bitmap images.
It can read, convert and write images in a variety of formats (over 100)
including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript,
SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale,
shear and transform images, adjust image colors, apply various special
effects, or draw text, lines, polygons, ellipses and Bézier curves.
All manipulations can be achieved through shell commands as well as through
an X11 graphical interface (display).
Homepage: http://www.imagemagick.org/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Task: kubuntu-desktop, kubuntu-netbook, edubuntu-desktop-gnome, edubuntu-desktop-kde,
xubuntu-desktop
Het omzetten van een groot aantal afbeeldingen is poepsimpel. Je geeft gewoon een van de volgende commando's in de directory waarin de te verkleinen afbeeldingen staan:
mogrify -resize 800x600 *.jpg
mogrify -resize 800 *.jpg
mogrify -resize 800x600! *.jpg
- Verklein alle afbeeldingen naar 40% van hun oorspronkelijke afmeting.
- Verklein alle afbeeldingen zodat die binnen 800x600 pixels passen, met behoud van de aspect ratio.
- Verklein alle afbeeldingen zodat de breedte 800 pixels is.
- Verklein alle afbeeldingen zodat de afmeting exact 800x600 pixels is, waarbij de aspect ratio verloren mag gaan.
mogrify past de afbeeldingen in-place aan, dus de originelen worden overschreven. De om te zetten afbeeldingen zet je dus best op voorhand in een aparte directory, ofwel gebruik je convert ipv mogrify zodat je een nieuwe bestandsnaam kan (moet) meegeven.
Snelheidstest
Ik ben ervan overtuigd dat imagemagick véél efficiënter is dan al die GUI-programma's (met uitzondering misschien van lichtgewicht Irfanview). Daarom daag ik alle Windowsers en Appelaars uit voor een snelheidstest.
Ik heb 100 jpg-afbeeldingen gemaakt, allemaal bestaande uit willekeurige ruis. Je kan hier een kleiner voorbeeld (100x100) downloaden, of je kan ze ook zelf aanmaken met mijn bash scriptje img-create:
for (( COUNTER=1; COUNTER<=100; COUNTER++ )) do
convert -size 3000x3000 xc: +noise Random noise-"$COUNTER".jpg
ls -hl noise-"$COUNTER".jpg
done
exit
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:57 noise-1.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:57 noise-2.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:57 noise-3.jpg
...
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-98.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-99.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-100.jpg
real 11m3.026s
user 10m44.710s
sys 0m13.570s
img-resize zet ik ze om naar een kleiner bestand:
for filename in `ls noise*.jpg`; do
convert $filename -resize 50% small-"$filename"
ls -hl *"$filename"
done
exit
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-100.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:28 small-noise-100.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:58 noise-10.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:28 small-noise-10.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:58 noise-11.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:28 small-noise-11.jpg
...
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-98.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:30 small-noise-98.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-99.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:31 small-noise-99.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:58 noise-9.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:31 small-noise-9.jpg
real 2m46.400s
user 3m37.430s
sys 0m10.530s
Linux liposuctie: Crunchbang in minder dan 1 gigabyte op de Acer Aspire One
Deze blogpost is een bewerking van http://po-ru.com/diary/linux-liposuction-or-xubuntu-in-under-a-gig-on-th.... Daar wordt er (X)Ubuntu Intrepid (8.10) gebruikt, terwijl mijn versie gericht is op Jaunty (9.04) en Karmic (9.10), meer bepaald de Crunchbang-variant met OpenBox desktop.
In een vorige blogpost heb ik 180 MiB vrijgemaakt door overbodige software en overbodige locales te verwijderen.
Ik heb di en du gebruikt om te achterhalen waar het meeste schijfruimte wordt verbruikt:
Filesystem Mount Megs Used Avail %Used fs Type
/dev/sda1 / 6099.6 1887.6 4212.0 31% ext4
2649 total
1396 /usr
900 /home
192 /var
124 /lib
16 /boot
8 /sbin
8 /etc
6 /bin
1 /tmp
1 /srv
/usr: 1396 MiB. Dit kan verkleind worden, met een combinatie van squashfs en unionfs.
squashfs laat je een filesystem comprimeren, maar het is read-only. unionfs laat je toe om er een schrijfbaar filesystem bovenop te leggen, zodat je gegevens kan wijzigen. Uiteraard, hoe meer data je wijzigt, hoe meer schijfruimte er gebruikt wordt, maar het is altijd mogelijk om opnieuw te comprimeren en de schijfruimte te herwinnen.
Eerst moet squashfs geinstalleerd worden. unionfs zit al standaard in de kernel bij Jaunty en Karmic, en moet dus niet meer geïnstalleerd worden.
/etc/modules:
squashfs
loop
/etc/fstab:
unionfs /usr unionfs nodev,noatime,dirs=/.filesystems/usr/overlay=rw:/usr=ro
/usr-directory opzij:
$ mkdir /usr
$ mount -a
$ init 3
/usr.old verwijderd worden.
Het schijfgebruik is nu:
Filesystem Mount Megs Used Avail %Used fs Type
/dev/sda1 / 6099.6 954.9 4834.9 21% ext4
/usr en :
1396 /usr
464 /.filesystems/usr
Opmerking: bij mij deed readahead een beetje lastig tijdens het booten. Dit probleem staat ook beschreven in deze forumtopic. Aangezien readahead alleen maar zinvol is bij een harde schijf maar niet bij een SSD, heb ik readahead ineens verwijderd:
Kleine full-disk backup met dd
Eerst de USB-stick opvullen met een file vol nullen:
dd: schrijven van 'delete': Geen ruimte meer over op apparaat
1890+0 records in
1889+0 records uit
1981267968 bytes (2,0 GB) gekopieerd, 1121,06 s, 1,8 MB/s
real 18m41.067s
user 0m0.020s
sys 0m8.357s
Dan deze file weer wissen:
Enkele keren syncen om zeker te zijn dat alle data is weggeschreven:
USB-stick unmounten:
Stick dumpen met dd en gzip:
3941375+0 records in
3941375+0 records uit
2017984000 bytes (2,0 GB) gekopieerd, 198,682 s, 10,2 MB/s
real 3m18.687s
user 0m37.058s
sys 0m32.902s
De grootte van de backup valt echt héél goed mee! 
-rw-r--r-- 1 amedee users 2,7M feb 7 15:40 USB_2G_ext2.gz
Achteraf de backup weer restoren:
3941375+0 records in
3941375+0 records uit
2017984000 bytes (2,0 GB) gekopieerd, 461,316 s, 4,4 MB/s
real 7m41.322s
user 0m16.009s
sys 0m25.070s
Opnieuw enkele keren syncen om zeker te zijn dat alle data is weggeschreven: