Dette Bash-skriptet erstattet 3 apper jeg bruker hver dag
Systemet mitt går aldri i stykker, men det forfaller stadig. Bufre hoper seg opp, duplikater formerer seg, og filnavn blir sakte men sikkert til meningsløshet. Å holde ting ryddig har blitt en jobb i seg selv.
I lang tid stolte jeg på en liten samling verktøy for å holde dette under kontroll. De fungerte alle bra, men de hadde den samme svakheten. De var reaktive, manuelle, og krevde at jeg husket å kjøre dem. Til slutt innså jeg at de alle håndhevet enkle regler jeg allerede forsto. Så jeg sluttet å åpne apper og skrev et enkelt Bash-skript for å bruke disse reglene automatisk.
Systemopprydding
Jeg pleide å stole på BleachBit for å rydde opp i systemet mitt: nettlesercacher, midlertidige filer, gamle logger og generelt søppel som samler seg over tid.
BleachBit gjør jobben sin godt, men arbeidsflyten føltes alltid litt rar. Jeg måtte huske å åpne det, skanne, gjennomgå listen og klikke meg gjennom et GUI for noe som i bunn og grunn var forutsigbart. Nettleserbufferen min ligger alltid i samme katalog. Midlertidige filer ligger alltid i /tmp. Gamle logger vokser alltid i /var/log. Ingenting av dette er dynamisk eller overraskende.
I praksis oppdaget jeg egentlig ingenting. Jeg brukte bare de samme reglene om og om igjen: slette kjente cache-mapper, tømme midlertidige filer, tømme søpla og fjerne loggfiler som var eldre enn en viss alder. Dette er akkurat den typen arbeid et shell-skript er godt egnet til.
Ryddefunksjonen min er egentlig en liste over trygge, eksplisitte handlinger. Bare et lite sett med kataloger jeg faktisk vil rydde, og en tidsgrense for alt som skal utløpe.
# Clear common cache directories
rm -rf ~/.cache/*
rm -rf ~/.mozilla/firefox/*/cache2/*
rm -rf ~/.config/google-chrome/Default/Cache/*
# Clear temporary files
rm -rf /tmp/*
# Remove old logs (older than 7 days)
find /var/log -type f -mtime +7 -exec rm -f {} \;
Dette ser aggressivt ut, men det er bevisst kjedelig. Hver sti er noe jeg har ryddet manuelt før. Det er ingen rekursjon over hjemmeområdet mitt, ingen mønsterbasert sletting, og ingen forsøk på å være smart. Når jeg er usikker på en regel, starter jeg med en testkjøring ved å bruke find ... -print i stedet for -exec rm.
Resultatet er at jeg ikke lenger «renger systemet mitt». Det bare skjer. Det som før var en periodisk BleachBit-økt, er nå en enkelt funksjon jeg kan kjøre etter behov eller planlegge med cron og glemme helt.
Finne duplikater
For å finne duplikatfiler brukte jeg Czkawka. Det er et kraftig verktøy som kan skanne hele kataloger, sammenligne filer etter størrelse eller hash, og vise deg nøyaktig hvor du kaster bort diskplass.
Problemet var ikke funksjonaliteten; det var friksjonen. Å kjøre Czkawka betydde å starte en annen app, velge skannemoduser, vente på resultater og deretter manuelt gå gjennom listene hver gang. Jeg brukte den bare når diskplassen ble et problem, selv om duplikater stadig samlet seg i bakgrunnen.
Under panseret er ikke duplikatgjenkjenning magi. Det er en enkel prosess: grupper filer etter størrelse, beregn hasjer for kandidater, og behandle identiske hasjer som duplikater. Når du forstår det, slutter problemet å være «hvilken app bør jeg bruke?» og blir i stedet «hvorfor automatiserer jeg ikke dette?»
Mitt skript følger den nøyaktige logikken. Det grupperer først filer etter størrelse for å unngå unødvendig arbeid, deretter beregner det en hash for hver gruppe, og til slutt rapporterer det filer med identiske hasher. Som standard kjører det i tørkmodus og skriver kun ut resultater.
# Find files larger than 1MB and group by size
find ~/Documents -type f -size +1M -exec ls -l {} \; \
| awk '{print $5, $9}' \
| sort -n > sizes.txt
# Compute hashes for potential duplicates
awk '{print $2}' sizes.txt | xargs sha256sum > hashes.txt
# Show duplicate hashes
sort hashes.txt | uniq -d -w64
Akkurat som med rydding, sletter ikke skriptet noe som standard. Det rapporterer bare duplikater. Hvis jeg vil fjerne dem, gjør jeg det eksplisitt og beholder som regel den nyeste kopien. Automatisering er nyttig, men blind sletting er hvordan du mister data.
Dette erstattet helt behovet mitt for Czkawka. Jeg søker ikke lenger etter duplikater som en spesiell oppgave. Jeg kjører bare en kommando, får en liste, og håndterer det med en gang.
Masseendring av navn
For masseendring av navn brukte jeg GPRename. Det er den typen verktøy du ikke tenker så mye på, men som du ender opp med å bruke hele tiden, spesielt når du håndterer bilder, nedlastinger eller filer fra andre.
Problemet var ikke at GPRename var dårlig. Det var at jeg alltid gjorde de samme tingene: småbokstaver på filnavn, erstatte mellomrom med bindestreker, fjerne rare tegn, eller legge til en dato-prefiks. Hver økt var en liten variasjon av den forrige, men krevde fortsatt at jeg åpnet et GUI og klikket gjennom alternativer.
På et tidspunkt gikk det opp for meg at jeg egentlig ikke bestemte noe som helst. Jeg hadde en personlig navnekonvensjon, og jeg bare håndhevet den manuelt om og om igjen.
Når du ser på omdøping som et sett med regler, blir Bash et åpenbart valg. Du har allerede løkker, regex og strengmanipulering. Og i motsetning til en GUI, finnes reglene i ren tekst.
for f in *; do
new=$(echo "$f" \
| tr '[:upper:]' '[:lower:]' \
| tr ' ' '-' \
| sed 's/[^a-z0-9._-]//g')
echo "$f -> $new"
mv "$f" "$new"
done
Som med alt annet, begynner jeg vanligvis med echo i stedet for mv for å forhåndsvise resultatet. Å gi filer nytt navn går raskt, men det er også irreversibelt hvis du ikke er forsiktig. Dette fjernet GPRename helt fra arbeidsflyten min. I stedet for å åpne et verktøy for filnavnendring, bruker jeg bare navngivingsreglene mine direkte.
Utbetalingen
Det praktiske resultatet er at jeg ikke lenger åpner noen av de tre appene for tre separate aktiviteter. Jeg kjører bare ett skript, eller lar det kjøre i bakgrunnen.
Det som tidligere var vedlikeholdsoppgaver er nå bare bivirkninger av å bruke systemet mitt. Diskplassen forblir forutsigbar. Hjemmekatalogen min forfaller ikke stille. Filnavn følger de samme konvensjonene uten at jeg trenger å tenke på dem.
Enda viktigere er det at den mentale innsatsen forsvant. Det er ingen dashbord å sjekke, ingen knapper å trykke på, og ingen beslutninger å ta. Reglene er skrevet en gang, i ren tekst, og brukt konsekvent.
Den virkelige gevinsten her var ikke å erstatte tre apper med Bash. Det var å innse at mesteparten av arbeidsflyten min bare var et sett med vaner som ventet på å bli automatisert. Dette er bare ett eksempel på Bash-skripting og hvordan det kan forvandle din Linux-opplevelse. Du kan finne hele skriptet med en README på min GitHub.


