Membuat arsip dari direktori tanpa nama direktori ditambahkan ke arsip

84

Saya memiliki struktur folder berikut:

  • akar
    • folder1
    • folder2
    • folder3
    • 7za.exe

Saya ingin menjalankan alat baris perintah 7-zip untuk mengompres semua file folder1ke file zip yang disebut folder1.zip.

Jalankan berikut ini

7za.exe a -tzip folder1.zip folder1\\*.*

menghasilkan file zip seperti yang diharapkan. Namun, ketika saya membuka file zip, ada folder di dalamnya yang disebut folder1, dan di dalamnya saya memiliki semua file yang ada di dalam folder itu. Saya tidak ingin nama folder ditambahkan ke folder zip, yaitu saya ingin menambahkan semua file dalam format file "Flat".

Saya juga tidak ingin menjalankan alat baris perintah secara rekursif untuk setiap file / folder individual.

Apakah ada saklar yang menyediakan fungsi ini?

gg.
sumber
Bisakah Anda cdmasuk ke folder1 dan 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Jawaban:

137

Dari file Bantuan 7-Zip :

a (Add) command

Menambahkan file ke arsip.

Contohnya

7z a archive1.zip subdir\

menambahkan semua file dan subfolder dari folder subdir ke archive archive1.zip. Nama file dalam arsip akan berisi subdir \ awalan.

7z a archive2.zip .\subdir\*

menambahkan semua file dan subfolder dari folder subdir ke arsip archive2.zip. Nama file dalam arsip tidak akan berisi subdir \ awalan.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Nama file dalam arsip c: \ archive3.zip akan berisi aw2 dir2 \ dir3 \, tetapi tidak akan berisi awalan c: \ dir1 \ prefix.

Jadi perintah yang Anda inginkan adalah: 7za.exe a folder1.zip .\folder1\*

Juga, perhatikan penanganan wildcard 7-Zip. Itu tidak memperlakukan *.*sebagai "semua file" - itu berarti "semua file dengan titik dalam nama file." File ekstensi-kurang akan terlewatkan. Jika Anda benar-benar menginginkan semua file, gunakan *saja.

Akhirnya, -tzipparameter tidak diperlukan jika nama file arsip berakhir .zip. 7-Zip cukup pintar untuk mengetahui format mana yang Anda inginkan dalam kasus tersebut. Ini hanya diperlukan saat Anda menginginkan ekstensi khusus (mis. 7za.exe a -tzip foo.xpi <files>Untuk Add-on Mozilla).

lebih gila
sumber
2

Ini berhasil untuk saya

Pertimbangkan struktur folder seperti C: \ Parent \ SubFolder ..... Dan Anda ingin membuat parent.zip yang akan berisi semua file dan folder C: \ Parent tanpa folder induk [yaitu akan dimulai dari SubFolder .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Ini akan membuat Parent.zip di C: \ Parent

Pritesh Dhokchaule
sumber
2
Ini menggandakan jawaban lain dan tidak menambahkan konten baru. Tolong jangan memposting jawaban kecuali Anda benar-benar memiliki sesuatu untuk berkontribusi.
DavidPostill
Yah ketika saya sedang mencari solusi saya tidak mendapatkan solusi yang tepat ini. Jelas saya tidak akan hanya menyalin tempelkan beberapa jawaban yang saya temukan online. Saya meluangkan waktu untuk itu sehingga saya merasa saya harus membagikannya. Per saya, Anda dapat menemukan jawaban yang tepat di sini dan di Stack Overflow diposting oleh saya.
Pritesh Dhokchaule
Perhatikan bahwa 7-Zip tidak *.*berarti "semua file" melainkan "semua file yang memiliki periode sebagai bagian dari nama file." Jadi jawaban ini sebenarnya akan menghilangkan file yang tidak memiliki ekstensi (ini tercantum dalam jawaban yang diterima).
Bill_Stewart
1

Hanya untuk memperluas jawaban yang diterima (saya tidak dapat menambahkan komentar di sana):

Di Linux menambahkan '*' tidak berfungsi untuk saya, jadi saya akhirnya membuat lebih banyak baris perintah verbose yang memberikan hasil yang diinginkan:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

penjelasan skrip:

  • simpan jalur dir saat ini untuk digunakan nanti;
  • arahkan ke direktori yang perlu diarsipkan;
  • buat arsip (perhatikan '.' (titik) pada akhirnya);
  • kembali ke dir yang asli;
  • singkirkan variabel yang menyimpan path dir asli

Semoga bermanfaat bagi seseorang.

Lebih manusiawi
sumber
Saya menyarankan untuk menempatkan *tanda kutip di (jika tidak shell akan memperluas ke file di tempat ini).
Simon Sobisch
-1

Bagaimana dengan ini. misalnya Folder / subFolder1, Folder / subfolder2

pilih semua subfolder> klik kanan kemudian buat arsip> pilih format apa pun

* Nama arsip akan menjadi folder induk ..

Sederhana bukan?

pengguna708375
sumber
3
Pertanyaannya adalah tentang CLI untuk 7-zip, bukan bagaimana menggunakan GUI. Mempelajari cara menggunakan GUI tidak ada gunanya saat Anda ingin mengotomatiskan sesuatu.
binki