Buat file zip dan abaikan struktur direktori


216

Saya perlu membuat file zip menggunakan perintah ini:

zip /dir/to/file/newZip /data/to/zip/data.txt

Ini berfungsi, tetapi file zip yang dibuat membuat struktur direktori yang meniru direktori ke file mentah. Banyak folder ekstra yang tidak saya butuhkan.

Saya tidak menemukan jawaban sekilas ke halaman manual atau pencarian Google.



2
Saya berpikir pertanyaan ini mendahului semua pertukaran stack lain tetapi sayangnya posting superuser sebenarnya lebih tua dari yang ini. Jika ada sesuatu yang bisa saya lakukan di sini untuk membantu memberi tahu saya. Ini pasti jawaban yang cukup panas karena Google masih mengarahkan banyak lalu lintas di sini. : D
Jake

Jawaban:


351

Anda bisa menggunakannya -j.

-j
--junk-paths
          Store just the name of a saved file (junk the path), and do  not
          store  directory names. By default, zip will store the full path
          (relative to the current directory).

19
Jika -jtidak berfungsi untuk direktori Anda (bersama-sama dengan -r) checkout jawaban ini
czerasz

kadang-kadang itu tidak berfungsi ... lebih suka tautan @czerasz;) yang pada dasarnya adalah kombo popd
TecHunter

36

Menggunakan -jtidak akan bekerja bersama dengan -ropsi.
Jadi solusi untuknya adalah:

cd path/to/parent/dir/;
zip -r complete/path/to/name.zip ./* ;
cd -;

Atau versi in-line

cd path/to/parent/dir/ && zip -r complete/path/to/name.zip ./* && cd -

Anda dapat mengarahkan output ke /dev/nulljika Anda tidak ingin cd -output muncul di layar


Sebenarnya, Anda mungkin ingin melakukan hal berikut:cd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
eddyP23

@ eddyP23 Bagaimana bedanya? Sebaliknya itu akan menyebabkan Anda menambahkan tidak. dari parentDir (..) untuk setiap direktori di jalur: |
Vikas Tawniya

Hasilnya sama, saya setuju. Tetapi dalam skrip otomatis yang berjalan di banyak lingkungan yang berbeda, Anda biasanya menghindari jalur global, karena Anda tidak tahu jalan global apa yang akan terjadi. Tetapi dari cd path/to/parent/dir/Anda dapat menghitung jumlah titik ganda ../dengan mudah.
eddyP23

@ eddyP23 masuk akal
Vikas Tawniya

33

Gunakan -jopsi:

   -j     Store  just the name of a saved file (junk the path), and do not
          store directory names. By default, zip will store the full  path
          (relative to the current path).


3

Atau, Anda dapat membuat tautan simbolis sementara ke file Anda:

ln -s /data/to/zip/data.txt data.txt
zip /dir/to/file/newZip !$
rm !$

Ini juga berfungsi untuk direktori.


1

Simpan direktori induk agar unziptidak memuntahkan file di mana-mana

Saat zip direktori, menyimpan direktori induk dalam arsip akan membantu menghindari membuang sampah sembarangan direktori saat ini ketika Anda nanti unzip file arsip

Jadi untuk menghindari mempertahankan semua jalur, dan karena Anda tidak bisa menggunakan -j dan -r bersama-sama (Anda akan mendapatkan kesalahan), Anda bisa melakukan ini sebagai gantinya:

cd path/to/parent/dir/;
zip -r ../my.zip ../$(basename $PWD)
cd -;

The ../$(basename $PWD)adalah keajaiban yang mempertahankan direktori induk.

Jadi sekarang unzip my.zipakan memberikan folder yang berisi semua file Anda:

parent-directory
├── file1
├── file2
├── dir1
│   ├── file3
│   ├── file4

Alih-alih mengotori direktori saat ini dengan file yang tidak di-zip:

file1
file2
dir1
├── file3
├── file4

0

Cukup gunakan -jrmopsi untuk menghapus struktur file dan direktori

zip -jrm /path/to/file.zip /path/to/file

hati-hati, -m --move Pindahkan file yang ditentukan ke dalam arsip zip; sebenarnya, ini menghapus direktori / file target setelah membuat arsip zip yang ditentukan. Jika direktori menjadi kosong setelah penghapusan file, direktori juga dihapus. Tidak ada penghapusan yang dilakukan sampai zip telah membuat arsip tanpa kesalahan. Ini berguna untuk menghemat ruang disk, tetapi berpotensi berbahaya sehingga disarankan untuk menggunakannya bersama -T untuk menguji arsip sebelum menghapus semua file input.
catalint
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.