extracttodisk
Pakkar backup-arkiv ut att på disken, og viser deg nøyaktig kva for filer som ville blitt overskrivne før det rører noko. Følgjesveinen til backuptousb, men det tek imot kva som helst tar-arkiv.
Problemet det løyser
Gjenoppretting er farlegare enn backup. Backup skriv til ein tom disk. Gjenoppretting skriv oppå det du har, og gjer du det på autopilot, kan du erstatte ei fersk mappe med ein tre veker gammal kopi utan å merke det før det er for seint.
Vanleg tar -x seier ingenting. Det berre skriv, og filer som fanst frå før blir borte utan eit ord. Dette scriptet les innhaldslista i arkivet først, samanliknar med det som faktisk ligg på disken, og legg fram fakta før noko skjer.
Kom i gang
$ chmod +x ~/scripts/extracttodisk $ echo "alias extracttodisk='~/scripts/extracttodisk'" >> ~/.bashrc $ source ~/.bashrc
Standardmappa for gjenoppretting blir sett øvst i fila:
DEFAULT_RESTORE="/home/youruser/backuprestore" # kvar arkiva blir pakka ut
Standardmappa er med vilje ikkje heimemappa di. Arkiva inneheld relative stiar, så eit arkiv som heiter myproject.tar.zst lagar backuprestore/myproject/. Den levande ~/myproject/ blir ståande urørt, og du kan samanlikne dei to før du flyttar noko tilbake.
Bruk
extracttodiskUtan argument: tek det nyaste arkivet som ligg ved sida av sjølve scriptet. På ein backup-disk er det som regel akkurat det du vil.extracttodisk a.tar.zstEitt namngjeve arkiv.extracttodisk *.tar.zstAlt i mappa, eitt etter eitt, i same målmappe.-lListar innhaldet i arkivet og stoppar der. Pakkar ikkje ut noko.-qHoppar over å lese innhaldslista. Startar med ein gong, men då utan kollisjonsliste.-yIngen spørsmål. Vel alltid det trygge alternativet.-o <sti>Pakk ut ein annan stad enn standardmappa.-hHeile kommentarblokka frå toppen av fila.Sjå kva som er i arkivet først
Er du usikker på kva du har, list det ut. Ingenting blir skrive til disk:
$ extracttodisk notes.txt.tar.zst -l
notes.txt
Ei vanleg gjenoppretting
Finst ikkje målmappa, tilbyr det seg å lage henne i staden 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 viktigaste i scriptet
Køyr den same gjenopprettinga ein gong til, oppå ei mappe som alt ligg der, og det stoppar opp. Det gjettar ikkje på om mappa «er den same». Det er ikkje mogleg å avgjere. Det viser deg tala og lèt deg velje:
$ 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 stor bokstav i [o/N/s] er N. Trykkjer du berre Enter, hamnar dataa i ei ny mappe og ingenting blir overskrive. Blir scriptet køyrt med -y, eller utan terminal, frå cron eller gjennom eit pipe, vel det same trygge vegen heilt av seg sjølv, og seier frå 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
Køyr det ein tredje gong, og du får myproject-restored-3. Det tel oppover til det finn eit namn som er ledig, så ei automatisk køyring aldri kan ete si eiga førre gjenoppretting.
Detaljar som er verdt å vite
Ny mappe blir laga via ein mellomstasjon, ikkje med tar --transform
Den nærliggjande måten å pakke ut under eit nytt namn på er tar --transform. Det er òg ei felle: uttrykket er sed-syntaks, og mappenamn med regex-teikn i seg, noko så vanleg som my[test], gjer at omskrivinga stille feilar og innhaldet hamnar rett oppå den eksisterande mappa. Altså nøyaktig den overskrivinga ein prøvde å unngå. Scriptet pakkar i staden ut i ei mellombels mappe og flyttar resultatet på plass etterpå. Ingen regex, ingen overraskingar.
Innhaldslista blir lesen berre éin gong
Både filteljinga til framdriftslinja og kollisjonssjekken treng lista over kva som er i arkivet. Ho blir lesen éin gong og mellomlagra. På eit stort arkiv tek akkurat det litt tid. Ein .zst på 50 GB kan bli ståande nokre minutt på «Reading archive index». Veit du at målmappa er tom, hoppar -q over heile runden og startar med ein gong, med ein spinnar i staden for framdriftslinje.
Avbrot ryddar etter seg
Ctrl-C midt i ei gjenoppretting fjernar både mellomlageret i /tmp og ein halvferdig mellomstasjon under målmappa. Du blir ikkje sitjande med ein .extracttodisk-stage.XXXX full av halve filer.
Begge scripta kopierer seg sjølve. Kvar køyring legg både backuptousb og extracttodisk ved sida av dataa, på backup-disken når du pakkar, i gjenopprettingsmappa når du pakkar ut. Kopiane blir overskrivne når dei er ulike, så verktøyet på disken alltid er same versjon som laga arkiva. Ein backup-disk du finn att om to år ber med seg det som skal til for å pakke han ut.
Den rå kommandoen bak
# pakk ut $ tar -I zstd -xf myproject.tar.zst -C /home/youruser/backuprestore # berre sjå innhaldet $ tar -I zstd -tf myproject.tar.zst | less # hent ut éi enkelt mappe frå arkivet $ tar -I zstd -xf myproject.tar.zst myproject/src/ # sjekk at arkivet ikkje er øydelagt $ zstd -t myproject.tar.zst
Blir ikkje vedlikehalde, endre det sjølv
Skrive til mi eiga maskin, lagt ut som det er. Ingen oppdateringar, ingen support.
Vil du ha det annleis, last ned fila og gi henne til ein AI saman med det du ønskjer: «pakk ut rett i heimemappa mi», «spør aldri, skriv alltid over», «sjekk sjekksummar etterpå». Koden er kommentert for å bli lesen, både av deg og av modellen du spør.