7Zip - Command Line: Kecualikan folder berdasarkan pola wildcard?

108

Adakah cara untuk mengecualikan jalur wild-carded dari perintah 7zip baris perintah?

Saya melakukan sesuatu seperti ini:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0

dan ingin mengecualikan salah satu \bin\*.*atau \obj\*.*folder yang ditemukan di bawah "FolderToArchive".

Untuk mengecualikan file, Anda dapat menggunakan -xparameter. File bantuan memberikan contoh ini untuk menggunakan -x:

7z a -tzip archive.zip *.txt -x!temp.*

Itu bagus untuk mengecualikan file. Tapi, sekali lagi, saya ingin mengecualikan folder yang ditentukan wildcard. Di bawah "FolderToArchive" saya ada beberapa folder, di bawah folder tersebut mungkin atau tidak mungkin bin\dan obj\folder. Saya ingin tidak memasukkan ini ke dalam arsip.

Saya sudah mencoba pola suka

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*

Sepertinya tidak ada yang mengecualikan bin\folder. Apakah ini hanya batasan 7zip?

Yoopergeek
sumber

Jawaban:

132

Untuk mengecualikan folder bin dan obj secara rekursif Anda dapat menggunakan perintah:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
astaga
sumber
5
Untuk orang lain: jika Anda ingin mengabaikan hanya file di direktori root, gunakan -xr0!*.zip- setidaknya saya tidak bisa membuatnya berfungsi tanpa r0.
Oliver
6
Juga, jika ini ada dalam baris perintah Linux / Unix, Anda mungkin perlu menyertakan tanda kutip tunggal, untuk tidak menambahkan pra-pemrosesan oleh shell, misalnya '-x!$RECYCLE.BIN'untuk mengecualikan Keranjang Sampah dari drive eksternal.
thanosa75
15

Untuk menghindari bug, gunakan -r atau -xr dengan hati-hati.

misalkan Anda memiliki direktori seperti:

.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src

dan jalankan perintah:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin

apa yang Anda dapatkan di arsip.7z:

.\path2\src
.\path5\src

Yaitu, the .\path2\dan .\path5\menjadi folder teratas dalam archive.7z, dan kedua bindirektori dikecualikan.

-x hanya mendukung path / nama file relatif ke folder teratas dalam arsip.

Jadi, jika Anda hanya ingin mengecualikan .\path1\path2\bin, tetapi untuk memasukkan semua direktori 'bin' lainnya, perintahnya harus seperti ini:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin

Saya mencoba menggunakan path absolut di -x, tetapi tidak pernah berhasil.


Memperbarui:

Ada opsi -spfdi 7z untuk Linux yang bekerja dengan path absolut.

Menurut Marco , -spfjuga tersedia di Windows mulai 7-zip 15.14

zhazha
sumber
2
Catatan: Setidaknya di Ubuntu Anda disarankan untuk meletakkan semua -x syarat dalam tanda kutip tunggal '-x!path2\bin'untuk tidak mengalami substitusi shell ... (membuat Anda lebih lama, "perintah" salah secara sintaksis ...)
Frank Nocke
Untuk merujuk pada komentar @FrankNocke, Anda juga dapat melakukan ini di windows untuk memungkinkan titik-titik dalam nama folder:'-xr!\.foo'
DonBecker