7Zip - Wiersz poleceń: wykluczyć folder (y) według wzoru wieloznacznego?

107

Masz pomysł, jak wykluczyć ścieżki z symbolami wieloznacznymi z wiersza polecenia 7zip?

Robię coś takiego:

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

i chciałby, aby wykluczyć jakiekolwiek \bin\*.*lub \obj\*.*foldery znalezione pod „FolderToArchive”.

Aby wykluczyć pliki, możesz użyć -xparametru. Plik pomocy zawiera ten przykład użycia -x:

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

To świetnie wyklucza plik. Ale znowu chciałbym wykluczyć folder określony ze znakiem zastępczym. Pod moim „FolderToArchive” istnieje wiele folderów, w tych folderach nie mogą lub nie mogą być bin\i obj\foldery. Chciałbym nie uwzględniać ich w archiwum.

Próbowałem takich wzorów

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

Wydaje się, że żaden nie wyklucza bin\folderu. Czy to po prostu ograniczenie 7zip?

Yoopergeek
źródło

Odpowiedzi:

131

Aby rekurencyjnie wykluczyć foldery bin i obj , możesz użyć polecenia:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
ciężki
źródło
5
Dla wszystkich innych: jeśli chcesz zignorować tylko pliki w katalogu głównym, użyj -xr0!*.zip- przynajmniej nie mogłem go uruchomić bez r0.
Oliver
6
Ponadto, jeśli znajduje się w wierszu poleceń systemu Linux / Unix, może być konieczne ujęcie pojedynczych cudzysłowów, aby nie dodać przetwarzania wstępnego przez powłokę, np. W '-x!$RECYCLE.BIN'celu wykluczenia Kosza zewnętrznego dysku.
thanosa75
15

Aby uniknąć błędu, ostrożnie używaj opcji -r lub -xr.

załóżmy, że masz katalogi takie jak:

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

i uruchom polecenie:

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

co masz w archiwum. 7z:

.\path2\src
.\path5\src

Oznacza to, że .\path2\i .\path5\stał się górny folder, w archive.7z, a oba binkatalogi zostały wyłączone.

-x obsługuje tylko ścieżkę / nazwę pliku względem najwyższego folderu w archiwum.

Tak więc, jeśli chcesz tylko wykluczyć .\path1\path2\bin, ale dołączyć wszystkie inne katalogi „bin”, polecenie powinno wyglądać tak:

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

Próbowałem użyć ścieżki bezwzględnej w -x, ale nigdy się nie udało.


Aktualizacja:

W -spfLinuksie jest dostępna opcja 7z, która działa ze ścieżką bezwzględną.

Według Marco , -spfjest również dostępny na Windows od 7-zip 15.14

zhazha
źródło
2
Uwaga: Przynajmniej na Ubuntu najlepiej jest umieścić wszystkie te -x terminy w pojedynczych cudzysłowach, '-x!path2\bin'aby nie wpaść na substytucję powłoki ... (znacznie dłuższe, niepoprawne składniowo „polecenie” ...)
Frank Nocke,
Aby odwołać się do komentarza @FrankNocke, możesz to również zrobić w '-xr!\.foo'
systemie