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.