unzip Komutu ile Zip Dosyalarini Acma ve Icerik Listeleme

unzip komutu, Linux sistemlerde zip arsivlerini acmak ve yonetmek icin kullanilan temel araclardan biridir. Tek bir dosyayi cikarma, belirli dizine acma veya sadece icerik listeleme gibi islemleri kolayca yapabilirsiniz. Bu yazida unzip komutunun en sik kullanilan seceneklerini pratik orneklerle ele aliyoruz.

unzip Komutu: Zip Dosyalarini Acma ve Icerik Listeleme

Gundelik sistem yonetimi islerinde zip dosyalari ile ugrasmaniz kacinilamaz bir gercek. Uygulama paketleri, yedek dosyalari, kullanicidan gelen arsivler… Hepsi bir sekilde masaniza geliyor. Linux uzerinde bu islemleri yapmanin en yaygın ve pratik yolu unzip komutunu kullanmak. Bu yazida unzip komutunu tum detaylariyla ele alacagiz, gercek dunya senaryolari uzerinden pratik ornekler goreceksiniz.

unzip Nedir ve Neden Kullanilir?

unzip, ZIP formatindaki arsiv dosyalarini acmak, icindeki dosyalari listelemek ve test etmek icin kullanilan bir komut satirı aracıdır. tar gibi araclarin gzip veya bzip2 ile birlikte calismasinin aksine, unzip ZIP formatini dogrudan anlayan ozel bir aractir.

ZIP formati ozellikle Windows dunyasindan gelen dosyalarda cok yaygindir. Bir web uygulamasi deploy ediyorsaniz, WordPress eklentisi kuruyorsaniz ya da bir musteriden gelen dosyalari aciyorsaniz, buyuk ihtimalle unzip ile is goreceksiniz.

Kurulum

Cogu Linux dagitiminda unzip onceden yuklu gelir. Yoksa:

# Debian/Ubuntu
sudo apt install unzip

# RHEL/CentOS/AlmaLinux
sudo dnf install unzip

# Arch Linux
sudo pacman -S unzip

Temel Kullanim

En sade haliyle kullanim suna benzer:

unzip dosya.zip

Bu komutu calistirdiginizdeki ciktiyi ilk gordugunuzde “aa, bu kadar mi basit” diye dusunebilirsiniz. Evet, bu kadar basit. Ama isin detayi bayagi derin.

Icerik Listeleme: Acmadan Once Ne Var?

Sysadmin olarak en buyuk hatalardan biri, bir zip dosyasini nerede duruyorsaniz orada acmaktir. Once icine bakin, ne var ne yok gorün. -l parametresi tam bunun icin:

unzip -l paket.zip

Tipik bir cikti soyle gorunur:

Archive:  paket.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1024  2024-03-15 10:23   config/app.conf
    45231  2024-03-15 10:23   bin/uygulama
     8192  2024-03-15 10:23   lib/ortak.so
---------                     -------
    54447                     3 files

Bu cikti size dosya boyutlarini, tarihleri ve icerik yapisini gosterir. Production sunucusuna bir seyler deploy etmeden once bu adimi atlamamanizi siddetle tavsiye ederim.

Daha detayli bilgi icin -v (verbose) parametresini kullanabilirsiniz. Bu, CRC degerlerini ve sikistirma oranini da gosterir:

unzip -v paket.zip

Hedef Dizine Acma

Varsayilan olarak unzip komutu calistirildiginiz dizine acar. Bu cogunlukla istemediginiz bir davranistir. -d parametresiyle hedef dizini belirtebilirsiniz:

unzip paket.zip -d /opt/uygulama/

Hedef dizin yoksa unzip onu olusturur. Ama bir not: dizin izinleriniz olmali tabii ki.

Gercek dunya senaryosu: Bir web uygulamasini deploy ederken:

# Once gecici bir yere ac
unzip uygulama_v2.1.zip -d /tmp/deploy_staging/

# Icini kontrol et
ls -la /tmp/deploy_staging/

# Her sey yolundaysa asil yerine tasima yap
rsync -av /tmp/deploy_staging/ /var/www/uygulama/

Bu sekilde production dizinini kirletmeden once kontrol etme sansiniz olur.

Belirli Dosyalari Acma

Bazen zip arsivinin tamamina ihtiyaciniz olmaz. Sadece belli bir dosyayi ya da belli dosyalari cikarmak isteyebilirsiniz:

# Sadece tek bir dosya
unzip arsiv.zip config/app.conf

# Birden fazla dosya
unzip arsiv.zip config/app.conf config/db.conf

# Wildcard ile benzer isimli dosyalar
unzip arsiv.zip "*.conf"

Wildcard kullaniminda tirnak isareti onemli. Shell’in pattern’i genisletmesini engelliyoruz, unzip kendisi hallediyor.

Gercek senaryo: Bir log arsivinden sadece bugune ait loglari cekmek istiyorsunuz:

unzip loglar_aralik.zip "2024-12-*.log" -d /tmp/bugunun_loglari/

Mevcut Dosyalarin Uzerine Yazma

Arsivi actiginizda hedef dizinde ayni isimli dosyalar varsa, unzip size her dosya icin sorar. Production ortaminda scriptler yazarken bu etkilesilim can sikici olabilir. Iki farkli yaklasim var:

Her seyi uzerine yaz (-o):

unzip -o paket.zip -d /opt/uygulama/

Hicbirini uzerine yazma (-n):

unzip -n paket.zip -d /opt/uygulama/

-n parametresi ozellikle kullanisli. Diyelim ki bir dizinde zaten bazi konfigurasyon dosyalariniz var ve bunlarin uzerine yazilmasini istemiyorsunuz, ama yeni gelen dosyalarin eklenmesini istiyorsunuz. -n tam olarak bunu yapar.

Parcali ve Karmasik Senaryolar

Sifre Korumalı Zip Dosyalari

Kullanicidan gelen veya guvenli transfer edilen zip dosyalari sifre korumalı olabilir:

unzip -P gizlisifre korumalı_dosya.zip

Tabii ki sifreyi komut satirina yazmak guvenlik acisindan iyi bir fikir degil, sifre komut gecmisinde gorunur. Interaktif olarak girilmesini tercih edin:

unzip korumalı_dosya.zip
# Sifre sorulur, tuslayip Enter'a basin

Script icinde sifre kullanmaniz sart ise, environment variable veya sifre dosyasi kullanin ve cok dikkatli olun.

Test Modu

Zip dosyasinin bozuk olup olmadigini test etmek icin -t parametresini kullanabilirsiniz. Hicbir dosya acilmaz, sadece arsiv butunlugu kontrol edilir:

unzip -t yedek.zip

Bu ozellikle yedekleme sistemlerini dogrulamak icin harika. Cron job’larınızda yedek aldiktan sonra bu testi calistirabilirsiniz:

#!/bin/bash
YEDEK_DOSYA="/yedekler/db_yedek_$(date +%Y%m%d).zip"

if unzip -t "$YEDEK_DOSYA" > /dev/null 2>&1; then
    echo "Yedek dosyasi saglikli: $YEDEK_DOSYA"
else
    echo "HATA: Yedek dosyasi bozuk! $YEDEK_DOSYA"
    # Burada alarm mekanizmanizi tetikleyin
    mail -s "Bozuk Yedek Alarmi" [email protected] <<< "Yedek dosyasi bozuk: $YEDEK_DOSYA"
fi

Cikti Kontrolu ve Sessiz Mod

Bazi durumlarda unzip’in ekrana yazdigı her seyi gormek istemezsiniz, ozellikle scriptlerde:

# Sessiz mod, hata mesajlari haric hicbir sey yazma
unzip -q paket.zip -d /hedef/

# Cok sessiz mod, hicbir sey yazma
unzip -qq paket.zip -d /hedef/

Tersine, her adimi gormek istiyorsaniz:

# Verbose, her dosyayi acerken goster
unzip -v paket.zip -d /hedef/

Gercek Dunya Senaryolari

Senaryo 1: Toplu Zip Acma

Bir dizinde yuzlerce zip dosyaniz var ve hepsini acmaniz gerekiyor. Belki kullanicilarin yukledigı dosyalar ya da bir yerden cektiginiz toplu arsivler:

#!/bin/bash
KAYNAK_DIZIN="/upload/bekleyen"
HEDEF_DIZIN="/islenmiş"

for zip_dosya in "$KAYNAK_DIZIN"/*.zip; do
    dosya_adi=$(basename "$zip_dosya" .zip)
    echo "Aciliyor: $zip_dosya"
    
    unzip -q "$zip_dosya" -d "$HEDEF_DIZIN/$dosya_adi"
    
    if [ $? -eq 0 ]; then
        echo "Basarili: $dosya_adi"
        mv "$zip_dosya" "$KAYNAK_DIZIN/tamamlanan/"
    else
        echo "HATA: $dosya_adi acilamadi"
        mv "$zip_dosya" "$KAYNAK_DIZIN/hatali/"
    fi
done

Senaryo 2: Deploy Scripti

Bir web uygulamasini zip olarak alan ve deploy eden script:

#!/bin/bash
set -e

PAKET=$1
DEPLOY_DIR="/var/www/uygulama"
YEDEK_DIR="/yedekler/deploy"
TARIH=$(date +%Y%m%d_%H%M%S)

if [ -z "$PAKET" ]; then
    echo "Kullanim: $0 paket.zip"
    exit 1
fi

# Once test et
echo "Paket kontrol ediliyor..."
unzip -t "$PAKET" || { echo "Paket bozuk!"; exit 1; }

# Mevcutu yedekle
echo "Mevcut versiyon yedekleniyor..."
zip -r "$YEDEK_DIR/yedek_$TARIH.zip" "$DEPLOY_DIR"

# Yeni surumu ac
echo "Yeni surum deploy ediliyor..."
unzip -o "$PAKET" -d "$DEPLOY_DIR"

echo "Deploy tamamlandi: $TARIH"

Senaryo 3: Zip Icindeki Belirli Dosyalari Bulmak

Buyuk bir zip arsivinin icinde belirli bir dosyanin olup olmadigini kontrol etmek:

# Arsiv icinde arama yap
unzip -l buyuk_arsiv.zip | grep "config.php"

# Sadece .conf uzantili dosyalari listele
unzip -l sistem_yedegi.zip | grep ".conf$"

# Dosya sayisini bul
unzip -l arsiv.zip | tail -1

Encoding ve Turkce Karakter Sorunu

Zip dosyalari Windows’tan geliyorsa, Turkce karakter iceren dosya isimleri bozuk gorunebilir. Bu cok klasik bir sorun:

# Encoding belirterek ac
unzip -O CP850 windows_dosyasi.zip

# Ya da
UNZIP_OPTS="-O CP850" unzip windows_dosyasi.zip

Eger bu da cozum olmuyorsa convmv aracini kullanabilirsiniz:

sudo apt install convmv
convmv -r -f cp850 -t utf-8 --notest ./acilan_dizin/

Exit Kodlari ve Hata Yonetimi

unzip belli exit kodlari dondurur, script yazarken bunlara dikkat etmelisiniz:

  • 0: Her sey yolunda
  • 1: Uyari var ama basarili
  • 2: Generic hata
  • 3: Ciddi hata, dosya acilmadi
  • 4, 5: Hafiza veya disk sorunu
  • 9: Zip dosyasi bulunamadi
  • 50-82: Arasi: Cesitli zip hatalar

Script’te kontrol:

unzip -q paket.zip -d /hedef/
EXIT_KOD=$?

case $EXIT_KOD in
    0) echo "Basarili" ;;
    1) echo "Uyarilar var ama tamam" ;;
    2) echo "Genel hata" ;;
    *) echo "Bilinmeyen hata: $EXIT_KOD" ;;
esac

unzip ile zip Farki

Ufak bir not: unzip sadece zip acar. Ama zip komutu ile unzip ayri paketlerdir, birini kurdugunuzda digeri gelmez. Zip olusturmak icin zip komutunu ayrica kurmaniz gerekir. Bazen kullanicilar bunu karistiriyor.

ZIP’e alternatif olarak python3 -m zipfile de kullanilabilir, bazi minimal sistemlerde unzip yokken ise yarar:

python3 -m zipfile -e arsiv.zip /hedef/dizin/
python3 -m zipfile -l arsiv.zip

Performans Ipucleri

Buyuk zip dosyalariyla ugrasirken:

  • -q modunu tercih edin, yazma islemi de zaman alır
  • Cok dosyali islemlerde hedef dizinin ayni disk bolumunde olmasi hızı artırır
  • Network uzerindeki bir zip’i direk acmak yerine once kopyalayip sonra acin
  • Paralel acma icin parallel komutu ile kombinleyebilirsiniz:
ls *.zip | parallel "unzip -q {} -d /hedef/{.}/"

Sonuc

unzip komutu basit gorunse de dogru kullanildiginda cok guclu bir arac. Ozellikle -l ile once iceri bakmak, -t ile butunluk kontrolu yapmak ve -d ile hedef dizin belirtmek gundelik hayatta en cok isinize yarayacak parametreler.

Scriptlerinizde exit kodlarini mutlaka kontrol edin, sessiz modu (-q) kullanin ve Windows’tan gelen dosyalar icin encoding sorununa hazırlıklı olun.

Zip dosyalariyla is yapmak bazen zahmetli gelebilir, ama bu konuya hakim olmak sizi bircok acil durumda kurtaracak. Production’da “zip acamıyorum” diye paniklemek yerine bu komutu ezberinizde bulundurmanizi tavsiye ederim.

zip Komutu ile Dosya Sikistirma ve ZIP Arsivi Olusturma

Linux sistemlerde zip komutu, dosya ve dizinleri ZIP formatinda sikistirarak arsivlemenizi saglar. Yedekleme, transfer ve depolama islemlerinde sikca kullanilan bu komutun temel ve ileri duzey kullanim sekillerini bu yazida bulabilirsiniz.

zip Komutu: Dosya Sıkıştırma ve ZIP Arşivi Oluşturma

Sysadmin hayatında sıkıştırma işlemleri kaçınılmaz. Log dosyalarını arşivleyeceksin, backup alacaksın, müşteriye bir şeyler göndereceksin ya da disk alanı kurtarmak için eski dosyaları paketleyeceksin. Linux dünyasında tar.gz daha yaygın olsa da, zip formatı özellikle Windows ile iletişimde, web sunucularında ve cross-platform senaryolarda hala birinci tercih. Bu yazıda zip komutunu her açıdan inceliyoruz.

zip Nedir ve Neden Hala Kullanılır?

zip, hem sıkıştırma hem de arşivleme işlemini tek adımda yapan bir format ve araçtır. tar gibi önce arşivleyip sonra sıkıştırma yapmaz, her dosyayı ayrı ayrı sıkıştırır. Bu yaklaşımın avantajı şudur: arşivden tek bir dosyayı çıkarmak istediğinde tüm arşivi açmak zorunda kalmazsın.

zip kullanmak isteyeceğin durumlar:

  • Windows kullanıcılarına dosya göndermek
  • Web uygulamalarında kullanıcıya download sunmak
  • Farklı işletim sistemleri arasında dosya transferi
  • Script ile otomatik backup oluşturmak
  • E-posta ekinde dosya göndermek (bazı mail sunucuları tar.gz’yi engeller)

Kurulum

Çoğu sistemde zip zaten yüklü gelir ama gelmiyorsa:

# Debian/Ubuntu
sudo apt install zip unzip

# RHEL/CentOS/Rocky Linux
sudo dnf install zip unzip

# Arch Linux
sudo pacman -S zip unzip

# macOS (Homebrew)
brew install zip

unzip paketini de mutlaka kur, arşivleri açmak için lazım olacak.

Temel Kullanım

Basit Arşiv Oluşturma

En temel kullanım şu şekilde:

# Tek dosyayı sıkıştır
zip arsiv.zip dosya.txt

# Birden fazla dosyayı sıkıştır
zip arsiv.zip dosya1.txt dosya2.txt dosya3.log

# Wildcard kullanarak belirli uzantıdaki dosyaları sıkıştır
zip arsiv.zip *.txt
zip logs.zip *.log

Burada dikkat etmen gereken şey: zip komutu, arşiv adını ilk argüman olarak alır. Varolan bir arşiv ismi verirsen, dosyaları o arşive ekler, üzerine yazmaz. Bu davranışı bilmeden bazen şaşırabilirsin.

Klasör Sıkıştırma (Recursive)

Bir klasörü tüm içeriğiyle sıkıştırmak için -r (recursive) parametresini kullanman gerekiyor:

# Klasörü sıkıştır
zip -r proje.zip /home/ahmet/proje/

# Mevcut dizini sıkıştır
zip -r backup.zip .

# Birden fazla klasörü birleştir
zip -r arsiv.zip klasor1/ klasor2/ dosya.txt

-r parametresini unutmak sık yapılan hatalardan biridir. Unutursan zip sadece boş klasörü ekler, içindeki dosyaları dahil etmez. Bunu fark etmeden backup aldığını sanan sysadmin’lere çok rastladım.

Sıkıştırma Seviyeleri

zip 0’dan 9’a kadar sıkıştırma seviyesi destekler. Varsayılan seviye 6’dır.

# Sıkıştırma yok, sadece arşivle (en hızlı)
zip -0 arsiv.zip dosyalar/

# Varsayılan sıkıştırma (seviye 6)
zip arsiv.zip dosyalar/

# Maksimum sıkıştırma (en yavaş, en küçük boyut)
zip -9 -r arsiv.zip dosyalar/

# Hızlı ama düşük sıkıştırma (seviye 1)
zip -1 -r hizli-backup.zip /var/log/

Pratik tavsiye: Log dosyaları gibi text tabanlı dosyalar için -9 seviyesi fark yaratır, %60-70 tasarruf sağlayabilirsin. Ama zaten sıkıştırılmış dosyalar için (jpg, mp4, gz) yüksek seviye zaman kaybından başka bir şey değildir.

Gercek Dunya Senaryosu 1: Web Sitesi Backup

Bir web sunucusunda çalışıyorsun ve her gece siteyi backup almak istiyorsun. Şöyle bir script yazabilirsin:

#!/bin/bash

# Web sitesi backup scripti
SITE_DIR="/var/www/html/sirketim.com"
BACKUP_DIR="/backup/web"
TARIH=$(date +%Y%m%d_%H%M%S)
BACKUP_DOSYA="$BACKUP_DIR/sirketim_$TARIH.zip"

# Backup dizini yoksa oluştur
mkdir -p $BACKUP_DIR

# Sıkıştır, log dosyalarını ve cache'i hariç tut
zip -r -9 $BACKUP_DOSYA $SITE_DIR 
    --exclude="$SITE_DIR/wp-content/cache/*" 
    --exclude="$SITE_DIR/wp-content/uploads/wpcf7_captcha/*" 
    --exclude="*.log" 
    --exclude="*.tmp"

# Sonucu kontrol et
if [ $? -eq 0 ]; then
    echo "Backup basarili: $BACKUP_DOSYA"
    # 30 gunden eski backuplari sil
    find $BACKUP_DIR -name "*.zip" -mtime +30 -delete
else
    echo "HATA: Backup basarisiz!" >&2
    exit 1
fi

Bu scripti crontab’a ekle:

# Her gece 02:30'da calistir
30 2 * * * /usr/local/bin/web-backup.sh >> /var/log/web-backup.log 2>&1

Dosya Hariç Tutma (Exclude)

Büyük arşivler oluştururken bazı dosya ve klasörleri hariç tutmak istersin. --exclude parametresi bunun için:

# Belirli uzantilari hariç tut
zip -r proje.zip /home/ahmet/proje/ --exclude="*.pyc" --exclude="*.log"

# Belirli klasoru hariç tut
zip -r proje.zip /home/ahmet/proje/ --exclude="/home/ahmet/proje/node_modules/*"

# Gizli dosyalari dahil et ama .git klasorunu hariç tut
zip -r deploy.zip . --exclude=".git/*" --exclude="*.pyc" --exclude="__pycache__/*"

# Birden fazla pattern'i liste dosyasindan oku
cat > exclude.lst << EOF
*.pyc
*.log
node_modules/*
.git/*
__pycache__/*
*.tmp
EOF

zip -r proje.zip /proje/ [email protected]

--exclude ile pattern kullanırken dikkatli ol. Pattern’lar wildcard içeriyorsa tırnak içine almalısın, yoksa shell genişletme yaparak beklenmedik sonuçlar verebilir.

Parola Korumalı Arşiv Oluşturma

Hassas dosyaları göndermen gerektiğinde şifreleme şart:

# Parola ile sıkıştır (parola sorulur)
zip -e gizli.zip hassas-dosyalar/

# Parola ile sıkıştır (AES-256 ile, daha güvenli)
zip -er --encryption=AES256 super-gizli.zip hassas-dosyalar/

# Script içinde parola ver (dikkat: komut geçmişinde gözükür!)
zip -P "gizliparola123" -r arsiv.zip dosyalar/

# Daha güvenli yontem: ortam degiskeni ile
ZIP_PASS="guclu_parola_burada"
echo "$ZIP_PASS" | zip -P "$ZIP_PASS" -r arsiv.zip dosyalar/
unset ZIP_PASS

Onemli uyari: Standart zip şifrelemesi (ZipCrypto) zayıftır. AES-256 kullanmak için zip -e yerine bazı sistemlerde 7z aracını tercih edebilirsin. Kritik veriler için mutlaka AES-256 kullan.

Arşiv Yönetimi: Guncelleme ve Düzenleme

Mevcut bir arşivi yönetmek için kullanışlı parametreler:

# Arşive yeni dosya ekle
zip mevcut.zip yeni-dosya.txt

# Arşivdeki degismiş dosyaları güncelle (-u update)
zip -u arsiv.zip *.txt

# Arşivden dosya sil (-d delete)
zip -d arsiv.zip gereksiz-dosya.txt

# Arşiv içindeki dosyaları listele
unzip -l arsiv.zip

# Daha detayli liste
unzip -v arsiv.zip

# Arşiv bütünlüğünü test et
zip -T arsiv.zip
# veya
unzip -t arsiv.zip

Gercek Dunya Senaryosu 2: Log Arşivleme

Büyük bir uygulamanın logları disk dolduruyor. Her ay sonunda logları sıkıştırıp arşivleyeceksin:

#!/bin/bash

# Log arsivleme scripti
LOG_DIR="/var/log/uygulama"
ARSIV_DIR="/arsiv/loglar"
GECEN_AY=$(date -d "1 month ago" +%Y%m)
DOSYA_ADI="logs_$GECEN_AY.zip"

mkdir -p $ARSIV_DIR

# Gecen aya ait log dosyalarını bul ve sıkıştır
find $LOG_DIR -name "*$GECEN_AY*.log" -type f | 
    zip -@ -9 "$ARSIV_DIR/$DOSYA_ADI"

if [ $? -eq 0 ]; then
    echo "Log arsivleme tamamlandi: $DOSYA_ADI"
    
    # Arsivlenen dosyaları dogrula
    unzip -t "$ARSIV_DIR/$DOSYA_ADI" > /dev/null 2>&1
    
    if [ $? -eq 0 ]; then
        echo "Arsiv dogrulandı, orijinal loglar siliniyor..."
        # Dogrulama basariliysa orijinal dosyalari sil
        find $LOG_DIR -name "*$GECEN_AY*.log" -type f -delete
    else
        echo "HATA: Arsiv bozuk, dosyalar silinmedi!" >&2
    fi
else
    echo "HATA: Arsivleme basarisiz!" >&2
    exit 1
fi

Bu scriptte dikkat etmem istediğim bir şey var: her zaman arşivi doğrula, sonra orijinali sil. Bu adımı atlayan sysadmin’lerin yaptığı hatayı düzeltmek için harcanan zamanı bir düşün.

Bolünmüş Arşivler (Split Archives)

Büyük dosyaları belirli boyutlarda bölerek arşivlemek gerektiğinde, mesela e-posta ekinde gönderirken ya da FAT32 gibi 4GB sınırı olan bir sisteme kopyalarken:

# 100MB'lik parcalara bol
zip -r -s 100m buyuk-arsiv.zip buyuk-klasor/

# 700MB'lik parcalara bol (CD boyutu)
zip -r -s 700m cd-arsivleri.zip veriler/

# Sonucta soyle dosyalar olusur:
# buyuk-arsiv.z01
# buyuk-arsiv.z02
# buyuk-arsiv.zip (son parca)

# Birleştirip acmak icin:
zip -FF buyuk-arsiv.zip --out tum-arsiv.zip
unzip tum-arsiv.zip

Pratik Ipuclari ve Sik Yapilan Hatalar

Ipuclari:

  • Büyük dizinleri sıkıştırırken -v parametresiyle ilerlemeyi takip edebilirsin
  • -j parametresi ile klasör yapısını düzleştirebilirsin (junk paths), tüm dosyalar kök dizinde toplanır
  • Pipe ile kullanmak için - (stdin/stdout) kullanabilirsin
# Ilerlemeyi goster
zip -r -v arsiv.zip buyuk-klasor/ 2>&1 | grep "adding:"

# Klasor yapisini duzlestir, tum dosyalar kok dizinde
zip -r -j duz-arsiv.zip /var/www/html/img/

# Komut ciktisini dogrudan zip'le
ps aux | zip -@ islemler.zip

# tar ile birlikte kullanım (nadiren de olsa lazim olur)
tar cf - /veri/ | zip -9 - > veri-arsiv.zip

Sik Yapilan Hatalar:

  • -r unutmak ve klasör içeriğinin arşivlenmediğini anlamamak
  • --exclude pattern’larını tırnak içine almamak
  • Arşivi doğrulamadan orijinal dosyaları silmek
  • Zaten sıkıştırılmış dosyaları tekrar yüksek seviyede sıkıştırmaya çalışmak

zip vs tar.gz: Hangisini Kullanmalısın?

| Durum | Tercih | |——-|——–| | Windows ile paylaşım | zip | | Linux sunucu backup | tar.gz | | Web’den download | zip | | Büyük dosya transferi | tar.gz veya tar.bz2 | | Script ile tek dosya açma | zip | | Maksimum sıkıştırma oranı | tar.xz veya 7z |

Sonuç

zip komutu, sysadmin araç kutusunda her zaman olması gereken temel bir araç. Windows ortamlarıyla konuşuyorsun, web uygulamalarına dosya sunuyorsun ya da sadece hızlıca bir arşiv oluşturman gerekiyor, zip işini görüyor.

Özellikle dikkat etmen gereken noktalar:

  • Recursive işlemler için -r şart, unutma
  • Hassas veriler için AES-256 şifreleme kullan
  • Arşivi sil silmeden önce her zaman doğrula (unzip -t)
  • Büyük arşivlerde sıkıştırma seviyesini duruma göre ayarla
  • Otomatik scriptlerde her zaman hata kontrolü yap

Backup ve arşivleme işlemleri sıkıcı görünür ama sisteminin can sigortasıdır. zip ile yazacağın düzgün bir backup scripti, ileride seni çok büyük bir dertten kurtarabilir. Buna söz veriyorum.