extracttodisk
Pakker backup-arkiver ut igjen på disken, og viser deg nøyaktig hvilke filer som ville blitt overskrevet før den rører noe. Følgesvennen til backuptousb, men den tar imot hvilket som helst tar-arkiv.
Problemet det løser
Gjenoppretting er farligere enn backup. Backup skriver til en tom disk. Gjenoppretting skriver oppå det du har, og gjør du det på autopilot, kan du erstatte en fersk mappe med en tre uker gammel kopi uten å merke det før det er for sent.
Vanlig tar -x sier ingenting. Den bare skriver, og filer som fantes fra før blir borte uten et ord. Dette scriptet leser innholdsfortegnelsen i arkivet først, sammenligner med det som faktisk ligger på disken, og legger fram fakta før noe skjer.
Kom i gang
$ chmod +x ~/scripts/extracttodisk $ echo "alias extracttodisk='~/scripts/extracttodisk'" >> ~/.bashrc $ source ~/.bashrc
Standardmappa for gjenoppretting settes øverst i fila:
DEFAULT_RESTORE="/home/youruser/backuprestore" # hvor arkivene pakkes ut
Standardmappa er med vilje ikke hjemmemappa di. Arkivene inneholder relative stier, så et arkiv som heter myproject.tar.zst lager backuprestore/myproject/. Den levende ~/myproject/ blir stående urørt, og du kan sammenligne de to før du flytter noe tilbake.
Bruk
extracttodiskUten argumenter: tar det nyeste arkivet som ligger ved siden av selve scriptet. På en backup-disk er det som regel akkurat det du vil.extracttodisk a.tar.zstEtt navngitt arkiv.extracttodisk *.tar.zstAlt i mappa, ett etter ett, i samme målmappe.-lLister innholdet i arkivet og stopper der. Pakker ikke ut noe.-qHopper over å lese innholdsfortegnelsen. Starter med én gang, men da uten kollisjonsliste.-yIngen spørsmål. Velger alltid det trygge alternativet.-o <sti>Pakk ut et annet sted enn standardmappa.-hHele kommentarblokka fra toppen av fila.Se hva som er i arkivet først
Er du usikker på hva du har, list det ut. Ingenting skrives til disk:
$ extracttodisk notes.txt.tar.zst -l
notes.txt
En vanlig gjenoppretting
Finnes ikke målmappa, tilbyr den seg å lage den i stedet for å avbryte:
$ extracttodisk myproject.tar.zst Restore into (Enter to accept): /home/youruser/backuprestore Folder does not exist: /home/youruser/backuprestore Create it? [Y/n] y Created /home/youruser/backuprestore Reading archive index (use -q to skip)... 55 files Extracting myproject.tar.zst -> /home/youruser/backuprestore/myproject/ 100% 00:00 taken Flushing to disk... done Archive 689 (55 files) Restored 220K -> /home/youruser/backuprestore/myproject Time 0m 0s Speed (too fast to measure) Scripts in the restore folder: + /home/youruser/backuprestore/extracttodisk + /home/youruser/backuprestore/backuptousb
Kollisjonsvarselet - det viktigste i scriptet
Kjør den samme gjenopprettingen en gang til, oppå en mappe som allerede ligger der, og den stopper opp. Den gjetter ikke på om mappa «er den samme» - det er ikke mulig å avgjøre. Den viser deg tallene og lar deg velge:
$ extracttodisk myproject.tar.zst Reading archive index (use -q to skip)... 55 files /home/youruser/backuprestore/myproject already exists: on disk now 220K (52 files would be overwritten) incoming archive 689 packed 2026-08-05 12:15 Would OVERWRITE these existing files. First few: myproject/src/file1.js myproject/src/file26.js myproject/src/file39.js myproject/src/file22.js myproject/src/file17.js myproject/src/file11.js ... and 46 more [o] overwrite in place [n] extract to a fresh myproject-restored-N/ [s] skip this archive Choose [o/N/s]: _
Legg merke til at store bokstaven i [o/N/s] er N. Trykker du bare Enter, havner dataene i en ny mappe og ingenting blir overskrevet. Kjøres scriptet med -y, eller uten terminal - fra cron eller gjennom en pipe - velger den samme trygge vei helt av seg selv, og sier fra om det:
Non-interactive: extracting to a fresh folder to avoid overwrite. Extracting to a fresh folder: myproject-restored-2/ Archive 689 (55 files) Restored 220K -> /home/youruser/backuprestore/myproject-restored-2
Kjør den en tredje gang, og du får myproject-restored-3. Den teller oppover til den finner et navn som er ledig, så en automatisk kjøring aldri kan spise sin egen forrige gjenoppretting.
Detaljer som er verdt å vite
Ny mappe lages via en mellomstasjon, ikke med tar --transform
Den nærliggende måten å pakke ut under et nytt navn på er tar --transform. Den er også en felle: uttrykket er sed-syntaks, og mappenavn med regex-tegn i seg - noe så vanlig som my[test] - gjør at omskrivingen stilltiende feiler og innholdet havner rett oppå den eksisterende mappa. Altså nøyaktig den overskrivingen man prøvde å unngå. Scriptet pakker i stedet ut i en midlertidig mappe og flytter resultatet på plass etterpå. Ingen regex, ingen overraskelser.
Innholdsfortegnelsen leses bare én gang
Både filtellingen til framdriftslinja og kollisjonssjekken trenger lista over hva som er i arkivet. Den leses én gang og mellomlagres. På et stort arkiv tar akkurat det litt tid - en .zst på 50 GB kan bli stående noen minutter på «Reading archive index». Vet du at målmappa er tom, hopper -q over hele runden og starter med en gang, med en spinner i stedet for framdriftslinje.
Avbrudd rydder etter seg
Ctrl-C midt i en gjenoppretting fjerner både mellomlageret i /tmp og en halvferdig mellomstasjon under målmappa. Du blir ikke sittende med en .extracttodisk-stage.XXXX full av halve filer.
Begge scriptene kopierer seg selv. Hver kjøring legger både backuptousb og extracttodisk ved siden av dataene - på backup-disken når du pakker, i gjenopprettingsmappa når du pakker ut. Kopiene overskrives når de er forskjellige, så verktøyet på disken alltid er samme versjon som lagde arkivene. En backup-disk du finner igjen om to år bærer med seg det som skal til for å pakke den ut.
Den rå kommandoen bak
# pakk ut $ tar -I zstd -xf myproject.tar.zst -C /home/youruser/backuprestore # bare se innholdet $ tar -I zstd -tf myproject.tar.zst | less # hent ut én enkelt mappe fra arkivet $ tar -I zstd -xf myproject.tar.zst myproject/src/ # sjekk at arkivet ikke er ødelagt $ zstd -t myproject.tar.zst
Vedlikeholdes ikke - endre den selv
Skrevet for min egen maskin, lagt ut som det er. Ingen oppdateringer, ingen support.
Vil du ha det annerledes, last ned fila og gi den til en AI sammen med det du ønsker: «pakk ut rett i hjemmemappa mi», «spør aldri, overskriv alltid», «sjekk sjekksummer etterpå». Koden er kommentert for å bli lest - både av deg og av modellen du spør.