Сжатие только файлов с использованием 7z без сохранения пути

Я использую исполняемый файл командной строки 7z для архивирования файлов, но вижу, что при добавлении в архив путь к файлам сохраняется в архиве.

Так что если я сделаю

7z a -tzip  myzip.zip dir1\dir2\*

архив myzip.zip будет содержать путь dir1\dir2. Я не хочу этого, скорее, я хочу, чтобы в zip-файл добавлялись только файлы без сохранения путей. Я искал совсем немного, но, похоже, не нашел способа сделать это, может быть, я упускаю что-то очевидное?

Спасибо

5 ответов

Решение

Дайте полный путь. Это должно работать. Не относительный путь от текущего местоположения. Например, я привожу ниже, где я хочу, чтобы файлы в папке man5 были заархивированы.

$ 7z a -tzip myzip.zip /home/pradeeban/Desktop/man4/man5/*

Почтовый индекс содержал только файлы, без каталогов.

Тогда я дал только относительный путь. У этого были каталоги, внутри почтового индекса.

$ 7z a -tzip myzip.zip Desktop/man4/man5/*

Пробовал с Linux (Ubuntu 12.04). Не уверен, отличается ли это от Windows.

Просто добавьте точку перед путем, т.е.7z a -tzip -r myzip.zip .\Relative\Dir\*

Я нашел способ сделать это, используя относительный путь:

7z a -tzip  myzip.zip %CD%\dir1\dir2\*

% CD% - это способ получения текущего пути в пакетном файле Windows, но он также работает из командной строки. Подробнее о захвате текущего каталога из командного файла.

Как объяснено в соответствующем вопросе в FAQ пользователя 7-zip, 7z хранит пути относительно рабочего каталога, поэтому вам нужно будет сначала cd в нужный каталог верхнего уровня для архива и запустите 7-zip отсюда.

cd dir1\dir2\
7z a -tzip  myzip.zip *

Если вы запускаете его из скрипта и не хотите влиять на него с измененным каталогом, используйте средства push/pop для каталогов, доступные в выбранной вами оболочке, или запускайте cd+7-zip в порожденном процессе, чтобы избежать влияния на весь ваш скрипт с измененным каталогом. Например, используя запуск Windows, это будет:

start /D dir1\dir2\ /wait 7z a -tzip  myzip.zip *

Это сработало для меня

Рассмотрим структуру папок, например C:\Parent\SubFolders..... И вы хотите создать parent.zip, который будет содержать все файлы и папки C: \ Parent без родительской папки [т.е. он будет начинаться из SubFolders.....]

cd /D "C:\Parent"

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

Это создаст Parent.zip в C: \ Parent

Другие вопросы по тегам