← Alle AI Script Restore · bash

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.

Fri bruk Linux + bash .tar.zst / .tar.gz / .tar Ingen installasjon

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

bash
$ chmod +x ~/scripts/extracttodisk
$ echo "alias extracttodisk='~/scripts/extracttodisk'" >> ~/.bashrc
$ source ~/.bashrc

Standardmappa for gjenoppretting blir sett øvst i fila:

extracttodisk, EDIT ME
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 -l
$ 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
$ 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:

kollisjon
$ 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:

extracttodisk -y
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

tar
# 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.