題 7Zip - 命令行:按通配符模式排除文件夾?


知道如何從命令行7zip命令中排除通配路徑嗎?

我正在做這件事:

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

並且想排除任何 \bin\*.* 要么 \obj\*.* 在“FolderToArchive”下找到的文件夾。要排除文件,您可以使用 -x 參數。幫助文件提供了此示例以供使用 -x

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

這對於排除文件非常有用。但是,我想再次排除通配符指定的文件夾。在我的“FolderToArchive”下有多個文件夾,在這些文件夾下可能有也可能沒有 bin\ 和 obj\ 文件夾。我想不在檔案中包含這些內容。

我嘗試過這樣的模式:

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

似乎沒有排除。這僅僅是7zip的限制嗎?


97
2018-01-18 15:37


起源




答案:


排除 箱子 和 OBJ 文件夾遞歸你可以使用命令:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj

117
2018-01-18 15:53



對於其他人:如果您只想忽略根目錄中的文件,請使用 -xr0!*.zip  - 至少我不能沒有它的工作 r0。 - Oliver
此外,如果這是在Linux / Unix命令行中,您可能需要用單引號括起來,以便不添加shell的預處理,例如: '-x!$RECYCLE.BIN' 排除外部驅動器的回收站。 - thanosa75


為避免錯誤,請小心使用-r或-xr。

假設您有以下目錄:

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

並運行命令:

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

你在archive.7z中得到了什麼:

.\path2\src
.\path5\src

那就是 .\path2\ 和 .\path5\ 成了 頂級文件夾 在archive.7z中,兩者都有 bin 目錄被排除在外。

-x僅支持路徑/文件名 相對的 到存檔中的頂級文件夾。

所以,如果你只想排除 .\path1\path2\bin,但要包含所有其他'bin'目錄,命令應如下所示:

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

我試圖在-x中使用絕對路徑,但永遠不會成功。


更新:

有一個選擇 -spf 在7z for Linux中使用絕對路徑。

根據 馬爾科-spf 在Windows上也可以從7-zip 15.14獲得


11
2018-03-01 10:27



注意:至少在Ubuntu上,建議您將所有這些-x術語放在單引號中 '-x!path2\bin' 不要碰到shell替換...(讓你更長,語法錯誤的“命令”...) - Frank Nocke
要引用@FrankNocke的註釋,您也可以在Windows上執行此操作以允許文件夾名稱中的點: '-xr!\.foo' - DonBecker