Att jämföra filer i katalogträd

Jag råkade idag ut för att behöva jämföra filer i två stora katalogträd. Upprinnelsen till det var att jag har migrerat filer från Dropbox till Google Drive, men av någon orsak så fortsatte jag att redigera filerna i Dropbox… Det gjorde att jag snabbt behövde jämföra träden fil för fil, och det hade nog tagit hela sommaren om jag inte kunde utnyttja de behändiga verktygen diff och grep som finns i Unix-miljöer. Fortsätt läsa ”Att jämföra filer i katalogträd”

Sök och ersätt text med sed

Min första kontakt med kommandoradsverktyget sed (https://www.gnu.org/software/sed/) var när jag skulle ersätta vissa ord i en lång textfil på min server. sed är en stream editor som tydligen kan göra massor av smarta saker med textfiler, men än så länge har mitt behov enbart inskränkt sig till att söka efter och ersätta ord. Hur går man då tillväga?

Om man har en textfilen hello.txt med en eller flera förekomster av ordet ”Hej”, och man vill ersätta dessa förekomster med ”Goddag”, så gör man följande i sitt terminalfönster:

sed 's/hej/goddag/g' hello.txt > goddag.txt

där det inledande s:et står för ”substitute” och g:et står för ”global” (kan tydligen också utelämnas i det här sammanhanget). Nu kommer alla förekomster av ”hej” i filen hello.txt att bytas ut mot ”goddag”, och det nya innehållet skrivs till filen goddag.txt (innehållet i hello.txt är oförändrat). Om man inte önskar en ny fil, utan enbart vill ändra ursprungsfilen, så så används sed -ie och raden avslutas sedan efter ”hello.txt” (dock kan man inte ångra detta kommando efteråt om något skulle bli fel).

Om man av någon orsak skulle vilja byta ut ord oavsett skiftläge på respektive bokstav till ett ord med bokstäver med ett givet skiftläge lägger man till ett I i slutet:

sed 's/hej/Goddag/gI' hello.txt > goddag.txt

Då kommer alla skiftlägen av ”hej” (t ex ”HEJ” eller ”Hej”) att bytas ut mot ”Goddag”.

Man ska nog inte se detta kommando som ett substitut för att ändra ord i en text i en ordbehandlare, ärligt talat är det ju mycket lättare att söka och ersätta på olika sätt i t ex Word. Men har man t ex en databasfil med massor av webbadresser som ska ändras efter ett givet mönster på servern kan detta sätt vara en lösning.

Här finns (mycket) mer att läsa om sed.

Att ta bort filer baserat på en lista

Jag kom i en situation där jag av misstag hade massa filer som installerats utanför RPM-databasen på linuxsystemet. Dessa ville jag rensa bort från disken. Olyckligtvis låg dessa filer tillsammans med andra filer som jag ville behålla. Detta hanterade jag på följande vis.

För att få ut listan med filerna utanför rpm-databasen kördes:

comm -13 <(rpm -qla | sort) <(find /path/to/tree -type f | sort) < files.txt

Detta lade listan i filen files.txt , som används för att kunna radera dessa filer.

Att enbart radera filer från listan är inte så svårt. Det låter sig göras med

xargs -a files.txt

Problemet visade sig vara att detta inte raderar de tomma katalogerna som filerna kan lämna efter sig. Dessutom gillar jag inte att radera alla dessa filer i ett svep. Jo, det var ju det jag ville, men tänk om det är någon nödvändig fil som har slunkit med där… Det blir en eventuell jobbig felsökning efteråt i så fall.

Här kom paketeringsprogrammet tar till undsättning, detta inspirerat av denna tråd.

tar cvfz failed_files.tgz --remove-files -T files.txt

Nu fick jag alltså filerna paketerade i arkivet failed_files.tgz ,samtidigt som de raderades från platsen. På så sätt håller jag dem i ett sorts karantän, med sökväg bevarad i arkivet. Ett mycket smidigt sätt att hantera de 562 filerna som av misstag slunkit in i en befintlig katalog.

Python i en notebook

För ett par år sedan gick jag en Python-kurs på KTH. Den var lärorik, och jag hade väldigt roligt när jag gick den. Det är ändå något speciellt att skapa ett program från grunden och få det att göra som man vill.

Igår sprang jag på en instruktion om hur man kan visualisera data med hjälp av Python. Det ledde mig i sin tur till Jupyter, som är en webbsaserad ”notebook” som bl a kan kopplas till Python. Jag har jobbat en del med Mathematica tidigare, och upplägget av Jupyter är liknande. Jag testade de program som jag hade skrivit i kursen i Jupyter-miljön, och de funkade bra där.

Enkelt Pythonprogram.png
Första programmet i den Pythonkurs jag gick år 2015

Fortsätt läsa ”Python i en notebook”

Att rita funktionsgrafer med Gnuplot

Det är ofta som vi mattelärare behöver ta fram funktionsgrafer på formen y=f(x) . Webbverktyget Desmos är ett enkelt och interaktivt verktyg som ofta passar bra i klassrummet, men om man vill anpassa grafen med en text, en pil eller en figur så är inte Desmos det bästa verktyget. Det är heller inte det bästa verktyget om man behöver sin graf i ett dokument eller som en bild på webben. Fortsätt läsa ”Att rita funktionsgrafer med Gnuplot”

Att bifoga bilder som ikoner i Apple Mail

Det är ingen hemlighet att jag är något av ett Apple-freak. Jag gillar gränssnittet, de snygga programmen / apparna och tycker oftast att de är uppbyggda på ungefär det sätt jag tänker. Det jag kan kritisera dem för är att systemen är styrda; det som Apple inte avser att folk ska göra är i allmänhet väldigt svårt att göra. En sådan sak är hur bifogandet av bilder i programmet Mail fungerar. Bilderna bifogas i mailet; det finns ingen enkel möjlighet att ”ikonisera” dem. En lösning finns dock, genom ett terminalkommando (en och samma rad):
defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes
För att återgå till standardläget skriver man istället in
defaults write com.apple.mail DisableInlineAttachmentViewing -bool false
i Terminalen.