Bagaimana cara saya mengarsipkan dengan subdirektori menggunakan baris perintah 7-Zip? Atau, bagaimana saya MENJAGA struktur folder saat pengarsipan?

16

Saya memiliki banyak file seperti ini:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

Saya hanya ingin tahu cara menjaga struktur folder saat pengarsipan. Ini lebih penting daripada hal duplikat, untuk mengetahui bagaimana menyelesaikannya, akan menjadi bonus.

@Lamb "Apakah Anda ingin mengarsipkan hanya file selektif (bukan seluruh isi folder) dari folder G1 dan G2?"

Itu hampir mengatakan semuanya, tetapi saya akan mencoba untuk meningkatkan: Saya tidak hanya ingin memindahkan hanya beberapa file yang dipilih ke arsip. Saya juga punya daftar file-file ini, termasuk nama path untuk setiap file.

Jadi, di SubDir1 mungkin ada 10 file, yang saya ingin zip tiga, dan di SubDir1 \ sub2 mungkin ada lima file, yang saya ingin zip semua lima. File yang perlu saya arsipkan ada dalam listfile.

Mungkin ada file duplikat, jadi harapan saya adalah bahwa dengan subdirektori ditambahkan, 7-Zip TIDAK melihatnya sebagai duplikat.

Dan saya suka melakukannya di baris perintah.

Saya sudah mencoba file batch seperti ini:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

Ini juga berarti bahwa file 01antique-shop.mp3, 02antique-shop.mp3, ...., til 33antique-shop.mp3 dan 34antique-shop.mp3, TIDAK boleh diarsipkan.

Folder lipat (= subdirektori) tidak ditambahkan ke MyArchive.7z, dan ini masalahnya.

Jelas, saya ingin menggunakan hanya satu komando dengan listfile, tetapi itu tidak berhasil.

Saya sudah mencoba:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt

yang benar-benar berfungsi dengan baik sejauh pemilihan berlangsung, tetapi TIDAK menjaga struktur direktori. Dengan sedih.

Bagaimana saya melakukan ini?

PrincessPooleRulz
sumber
Apakah Anda ingin mengarsipkan hanya file selektif (bukan seluruh isi folder) dari folder G1 dan G2?
Ankit

Jawaban:

12

Versi stabil terbaru 7-Zip (15.14) memiliki switch -spf yang memungkinkan penyimpanan jalur absolut.

Misalnya, jika file list.txt adalah

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

perintah 7z a p.7z -spf @list.txtakan menghasilkan arsip yang menyimpan path absolut seperti dalam daftar. Atau, perintah 7z a p.7z -spf2 @list.txtakan menghapus huruf drive:

tmp\dir1\file.txt
tmp\dir2\file.txt

Jika file list.txt adalah

dir1\file.txt
dir2\file.txt

perintah 7z a p.7z @list.txtakan menyimpan path relatif seperti dalam daftar, di kedua versi 9.20 dan 15.14.

Saya melakukan lebih banyak tes dengan switch -spf. Hasilnya ada di sini .

Marco
sumber
Saya mencari ide ini selama sehari. terima kasih!
Moshe L
9

Saya mendapatkannya untuk mengarsipkan direktori dengan subdirektori menggunakan yang berikut :

7z.exe a - t7z NewArchivePath PathOfFolderToArchive
Eric Roper
sumber
Saya tidak dapat menemukan tautan langsung ke 7zA.exe di mana saja (sesuai tautan Anda), apakah sudah usang dan diganti oleh 7z.exe?
PrincessPooleRulz
@ user194767: 7za.exe adalah versi baris perintah .
Karan
dan, saya ingin menggunakannya, tetapi saya tidak dapat menemukannya di halaman itu, 7-zip.org/download.html. Jadi, hanya untuk menjadi jelas: dengan "tidak dapat menemukan tautan langsung ke 7zA.exe di mana pun" Saya benar-benar bermaksud: "Tolong beri saya tautan langsung ke perangkat lunak gratis ini!" Terima kasih!
PrincessPooleRulz
1
@ user194767: Ok, inilah versi sekarang, tetapi apakah Anda mengatakan Anda tidak bisa melihat 7-Zip Command Line Versi manapun pada halaman itu ?!
Karan
Saya tidak bisa 7zA.exe jadi coba gunakan 7z.exe dan berhasil. Saya tidak yakin untuk apa flag -r digunakan tetapi tidak diperlukan untuk mengarsipkan subdirektori.
Eric Roper
7

Coba ini sebagai gantinya:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

Masalahnya tampaknya bahwa orang telah meminta untuk tahun untuk pilihan penyimpanan jalur yang tepat (seperti yang mereka miliki untuk kemampuan untuk memodifikasi arsip multi-volume yang ), namun penulis tampaknya tidak tertarik. Itulah bagian dari alasan mengapa saya mulai menggunakan WinRAR begitu banyak.


Jika Anda memiliki listfile, 7-Zip tidak akan menyimpan jalur jika file yang akan diarsipkan tidak berbagi direktori tingkat atas tunggal. Misalnya jika Anda memiliki Input.txt yang berisi yang berikut:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

Jika Anda menjalankan 7z a MyArchive.7z @Input.txt, Anda akan melihat bahwa jalur telah dilucuti sepenuhnya, yang tampaknya sepenuhnya mundur bagi saya (OTOH rar a MyArchive.rar @Input.txtmelakukan pekerjaan dengan baik).

Jadi untuk mengatasi kekurangan 7-Zip, Anda dapat menggunakan file batch sebagai berikut:

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

Catatan: Ganti D:\MyArchive.7zdengan jalur yang benar ke arsip tujuan Anda. Juga, file batch harus bekerja terlepas dari apakah Anda telah mengutip lintasan di listfile Anda atau tidak.


Sunting: Jika listfile Anda terlihat seperti:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

atau

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

kemudian edit agar terlihat seperti ini sebagai gantinya:

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

Sekarang dengan asumsi semua file yang akan diarsipkan berada di bawah C:\$$-edrive, navigasikan ke C: \ dan jalankan 7z a C:\MyArchive.7z @C:\Input.txt. Menggunakan listfile path akan disimpan hanya jika tidak ada huruf drive, tidak ada garis miring terbalik awal di sana dan jika direktori tingkat atas (root) adalah sama untuk semua file. Juga, untuk hasil terbaik, saya menyarankan Anda untuk tidak membuat MyArchive.7z di C: \ $$ - edrive.

Karan
sumber
Ya, jawabannya 3/4 ok. RAR bekerja super, tetapi file batch bekerja soso. Inilah hasilnya, dan itu hanya menambahkan SATU file ke arsip saya, yang tanpa spasi dalam nama file___ C: \ Program \ ritsleting \ 7-Zip> (pushd "C: \ c: \ Program \ ritsleting \ 7-Zip \ 7z .exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ G \ gattaca_7mp 3_zefen \ gattaca - 03 the one moment.mp3" "popd) 7-Zip 4.65 Hak cipta (c) 1999-2009 Igor Pavlov 2009 Memindai Memperbarui arsip c: \ $$ - edrive \ FGH.7z Kesalahan: Tidak dapat membuka file FGH.7z.tmp Akses ditolak. Kesalahan sistem: kesalahan tidak terdefinisi ===== Yang paling penting adalah mungkin kesalahan akses ditolak?
PrincessPooleRulz
Bisakah Anda menambahkan beberapa baris sampel (dengan spasi dan tanpa) dari listfile Anda yang sebenarnya ke pertanyaan Anda di atas?
Karan
oke, jadi saya mengganti semua spasi dengan titik-titik di nama file, tetapi tidak di pathnames, yang akan saya coba sekarang. output masih: C: \ Program \ ritsleting \ 7-Zip> (______ pushd c: _______ c: \ Program \ ritsleting \ 7-Zip \ 7z.exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-. starcraft.vs.south.park.mp3 "_______ popd________) ________ Memindai arsip Pembaruan c: \ $$ - edrive \ FGH.7z Kesalahan: Tidak dapat membuka file FGH.7z.tmp Akses ditolak Kesalahan sistem: kesalahan tidak terdefinisi
PrincessPooleRulz
"Saya mengganti semua spasi dengan titik-titik dalam nama file" - Berarti Anda mengganti nama file yang sebenarnya, atau hanya mengedit listfile? Spasi di kedua nama file dan jalur harus baik-baik saja, lihat edit saya di atas (yaitu dari daftarfile Anda hapus C: \ dan tempatkan tanda kutip di semua jalur). Sekarang Anda harus dapat menggunakan 7z secara langsung, bukan penyelesaian file batch saya.
Karan
1. Saya mengganti nama keduanya = = = = = = 2. Saya telah membuat perubahan, tetapi masih tidak berfungsi dengan 7z = = = = = = 3. $$ - edrive \ memang satu-satunya direktori teratas. = = = = = 4. Pesan kesalahan = = = = = PERINGATAN untuk file: = = = = = $$ - edrive: Sistem tidak dapat menemukan file itu. = = = = = = = = = "$$ - edrive: Sistem tidak dapat menemukan file itu. = = = = = = = = = PERINGATAN: Tidak dapat menemukan 2 file = = = = = = C: \ Program \ zippers \ 7-Zip> = = = = = perhatikan bahwa ada dua peringatan, dan yang kedua dimulai dengan satu kutipan ganda ... Ganjil?
PrincessPooleRulz
0

7-Zip akan melihatnya sebagai duplikat, dan lewati. Jika ada cara untuk menyiasatinya, saya tidak pernah menemukannya - saya selalu membagi pekerjaan menjadi beberapa arsip.

MT_Head
sumber
Anda tahu cara MEMPERTAHANKAN struktur folder saat zip file menjadi arsip? Mereka mengatakan itu adalah default, tetapi TIDAK.
PrincessPooleRulz
@ user194767 - Saya menggunakan baris perintah seperti ini: di %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempmana ZDIRpath ke 7-Zip dan ZIPdrive tujuan.
MT_Head
0

Tidak yakin bagaimana membantu dengan duplikat. Namun, saya pikir sistem yang lebih nyaman daripada batch dengan perintah penuh per akan membuat listfile.txt:

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

Dan kemudian kompres semuanya dengan 7z a -r -tzip archive.zip @listfile.txt

Kosinus
sumber
0

Saya telah membuat skrip kelelawar untuk digunakan dengan totalcmd "tot-zip.bat":

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

Kemudian di totalcmd buat pintasan untuk itu: masukkan deskripsi gambar di sini

Kemudian ketika Anda ingin zip beberapa file / folder dan melestarikan struktur folder relatif terhadap %TOP_DIR%Anda cukup pilih file yang diperlukan (di suatu tempat di dalam %TOP_DIR%) dan tekan tombol.

grabantot
sumber