Tworzenie archiwum z katalogu bez dodawania nazwy katalogu do archiwum


83

Mam następującą strukturę folderów:

  • korzeń
    • folder 1
    • folder2
    • folder3
    • 7za.exe

Chcę uruchomić narzędzie wiersza polecenia 7-zip, aby skompresować wszystkie pliki folder1do pliku zip o nazwie folder1.zip.

Uruchamianie następujących

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

tworzy plik zip zgodnie z oczekiwaniami. Jednak gdy otwieram plik zip, ma on w sobie folder o nazwie folder1, aw nim mam wszystkie pliki, które były w tym folderze. Nie chcę dodawać nazwy folderu do folderu zip, tzn. Chciałbym dodać wszystkie pliki w formacie „płaskim”.

Nie chcę też rekurencyjnie uruchamiać narzędzia wiersza poleceń dla każdego pliku / folderu.

Czy istnieje przełącznik zapewniający tę funkcjonalność?


Czy możesz cdprzejść do folderu 1 i 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Odpowiedzi:


136

Z pliku pomocy 7-Zip :

polecenie (Dodaj)

Dodaje pliki do archiwizacji.

Przykłady

7z a archive1.zip subdir\

dodaje wszystkie pliki i podfoldery z podkatalogu folderu do archiwum archive1.zip. Nazwy plików w archiwum będą zawierać subdir \ prefix.

7z a archive2.zip .\subdir\*

dodaje wszystkie pliki i podfoldery z podkatalogu folderu do archiwum archive2.zip. Nazwy plików w archiwum nie będą zawierać subdir \ prefix.

cd /D c:\dir1\

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

Nazwy plików w archiwum c: \ archive3.zip będą zawierać prefiks katalog2 \ katalog 3 \, ale nie będą zawierać prefiksu katalog c: \ katalog1 \.

Polecenie, które chcesz, to: 7za.exe a folder1.zip .\folder1\*

Zwróć także uwagę na obsługę symboli wieloznacznych przez 7-Zip. Nie traktuje się go *.*jako „wszystkich plików” - oznacza „wszystkie pliki z kropką w nazwie pliku”. Pliki bez rozszerzeń zostaną pominięte. Jeśli naprawdę chcesz wszystkie pliki, po prostu użyj *zamiast tego.

Wreszcie -tzipparametr nie jest potrzebny, jeśli nazwa pliku archiwum kończy się na .zip. 7-Zip jest wystarczająco inteligentny, aby dowiedzieć się, jaki format chcesz w takich przypadkach. Jest to wymagane tylko wtedy, gdy potrzebujesz niestandardowego rozszerzenia (np. 7za.exe a -tzip foo.xpi <files>Dla dodatku Mozilla).


2

To zadziałało dla mnie

Rozważ strukturę folderów, takich jak C: \ Parent \ SubFolders ..... I chcesz utworzyć plik parent.zip, który będzie zawierał wszystkie pliki i foldery C: \ Parent bez folderu nadrzędnego [tzn. Rozpocznie się od SubFolders .....]

cd /D "C:\Parent"

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

Spowoduje to utworzenie Parent.zip w C: \ Parent


2
To powiela inną odpowiedź i nie dodaje żadnej nowej treści. Nie publikuj odpowiedzi, chyba że masz coś nowego do dodania.
DavidPostill

Kiedy szukałem rozwiązania, nie znalazłem dokładnego rozwiązania. Oczywiście nie skopiuję tylko wkleić odpowiedzi, które znalazłem w Internecie. Spędzam nad tym trochę czasu, więc czułem, że powinienem się tym podzielić. Jak dla mnie, możesz znaleźć tę dokładną odpowiedź tutaj i na opublikowanym przeze mnie przepełnieniu stosu.
Pritesh Dhokchaule,

Zauważ, że 7-Zip nie *.*oznacza „wszystkich plików”, ale „wszystkie pliki, które mają kropkę jako część nazwy pliku”. Tak więc ta odpowiedź faktycznie pominie pliki, które nie mają rozszerzenia (jest to odnotowane w zaakceptowanej odpowiedzi).
Bill_Stewart

1

Aby rozwinąć zaakceptowaną odpowiedź (nie mogłem tam dodać komentarza):

W Linuksie dodanie „*” nie działało dla mnie, więc skończyło się na wymyślaniu bardziej szczegółowej linii poleceń, która dała pożądany rezultat:

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

===========

wyjaśnienie skryptu:

  • zapisz bieżącą ścieżkę katalogu, aby użyć później;
  • przejdź do katalogu, który należy zarchiwizować;
  • utwórz archiwum (uwaga „.” (kropka) na końcu);
  • wróć do oryginalnego reż;
  • pozbyć się zmiennej, która przechowała oryginalną ścieżkę katalogu

Mam nadzieję, że może się przydać komuś.


Sugerowałbym umieszczenie *cudzysłowów (w przeciwnym razie powłoka rozwinie go do plików w tym miejscu).
Simon Sobisch

-1

Co powiesz na to. np. Folder / subFolder1, Folder / subfolder2

wybierz wszystkie podfoldery> kliknij prawym przyciskiem myszy, a następnie utwórz archiwum> wybierz dowolny format

* Nazwa archiwum będzie folderem nadrzędnym.

Proste prawda?


3
Pytanie dotyczy CLI dla 7-zip, a nie jak używać GUI. Nauka korzystania z GUI nie ma sensu, gdy chcesz zautomatyzować różne rzeczy.
binki,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.