Як архівувати підкаталоги за допомогою командного рядка 7-Zip? Або як я зберігаю структуру папок під час архівування?


16

У мене є маса таких файлів:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

Я просто хочу знати, як зберегти структуру папок під час архівування. Це важливіше за дублікат, бо знати, як це вирішити, було б бонусом.

@Lamb "Ви хочете архівувати лише паливні файли (не весь вміст папки) з папок G1 та G2?"

Це майже все це говорить, але я спробую вдосконалити: я не лише хочу перемістити лише деякі вибрані файли до архіву. У мене також є список цих файлів, включаючи назви шляхів до кожного файлу.

Так, у SubDir1 може бути 10 файлів, з яких я хочу зібрати три, а в SubDir1 \ sub2 може бути п’ять файлів, з яких я хочу копіювати всі п’ять. Файли, які мені потрібно архівувати, знаходяться у списку файлів.

Можуть бути дублікати файлів, тому я сподіваюся, що з доданими підкаталогами 7-Zip НЕ бачить їх дублікатами.

І мені подобається це робити в командному рядку.

Я спробував такий пакетний файл:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

Це також означає, що файли 01antique-shop.mp3, 02antique-shop.mp3, ...., til 33antique-shop.mp3 та 34antique-shop.mp3, НЕ повинні архівуватися.

Імена папок (= підкаталогів) не були додані до MyArchive.7z, і це проблема.

Очевидно, я хотів би використовувати лише один командос із списком файлів, але це також не працює.

Я спробував:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt

що насправді працює досить добре, що стосується вибору, але воно НЕ зберігає структуру каталогу. Сумно.

Як це зробити?


Ви хочете архівувати лише паливні файли (не весь вміст папки) з папок G1 та G2?
Анкіт

Відповіді:


12

Остання стабільна версія 7-Zip (15.14) має перемикач -spf, що забезпечує абсолютне зберігання шляху.

Наприклад, якщо файл list.txt є

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

команда 7z a p.7z -spf @list.txtстворить архів, що зберігає абсолютні шляхи, як у списку. Як варіант, команда 7z a p.7z -spf2 @list.txtвидалить букву диска:

tmp\dir1\file.txt
tmp\dir2\file.txt

Якщо файл list.txt є

dir1\file.txt
dir2\file.txt

команда 7z a p.7z @list.txtбуде зберігати відносні шляхи, як у списку, в обох версіях 9.20 та 15.14.

Я зробив більше тестів за допомогою перемикача -spf. Результати тут .


Я цілий день шукав цю ідею. Дякую !
Моше Л

9

Я отримав його для архівації каталогу з підкаталогами, використовуючи наступне :

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

Я не можу ніде знайти пряме посилання на 7zA.exe (за вашим посиланням), воно застаріле і замінене на 7z.exe?
PrincessPooleRulz

@ user194767: 7za.exe - версія командного рядка .
Каран

і я хотів би використовувати його, але я не можу знайти його на цій сторінці, 7-zip.org/download.html. Отже, щоб було зрозуміло: "я не можу знайти прямого посилання на 7zA.exe ніде", я дійсно мав на увазі: "Будь ласка, дайте мені пряме посилання на це безкоштовне програмне забезпечення!" Дякую!
PrincessPooleRulz

1
@ user194767: Ось , ось поточна версія, але ти мені кажеш, що ти не міг помітити версію командного рядка 7-Zip ніде на цій сторінці ?!
Каран

Я не зміг 7zA.exe, тому спробував використовувати 7z.exe, і він спрацював. Я не впевнений, для чого використовується прапор -r, але він не потрібен для архівації підкаталогів.
Ерік Ропер

7

Спробуйте це замість цього:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

Проблема, здається, полягає в тому, що люди роками просять належних варіантів зберігання шляхів (так само, як вони мають можливість змінювати багатотомні архіви ), але автор, схоже, не зацікавлений. Це частина причини, чому я так почав використовувати WinRAR.


Якщо у вас є список файлів, 7-Zip не зберігатиме шляхи, якщо файли, що архівуються, не мають спільного каталогу одного верхнього рівня. Наприклад, якщо у вас є Input.txt, що містить таке:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

Якщо ви біжите 7z a MyArchive.7z @Input.txt, ви побачите, що стежки були викреслені повністю, що мені здається повністю зворотним (OTOH rar a MyArchive.rar @Input.txtробить цю роботу чудово).

Щоб подолати недолік 7-Zip, ви можете використовувати пакетний файл наступним чином:

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

Примітка. Замініть D:\MyArchive.7zправильним шляхом до архіву призначення. Також пакетний файл повинен працювати незалежно від того, ви процитували шляхи у вашому списку файлів чи ні.


Редагувати: якщо ваш файл списку виглядає так:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

або

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

потім відредагуйте його так, щоб виглядати так:

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

Тепер припускаючи, що всі файли, які потрібно заархівувати, знаходяться під C:\$$-edrive, перейдіть до C: \ та запустіть 7z a C:\MyArchive.7z @C:\Input.txt. Використовуючи файл списку, шляхи будуть збережені лише за умови, що немає літер диска, початкових зворотних нахилів немає і якщо каталог верхнього рівня (кореневий) однаковий для всіх файлів. Також для найкращих результатів раджу не створювати MyArchive.7z в C: \ $$ - edrive.


Ну, відповідь була 3/4 ок. RAR працював супер, але пакетний файл працював Soso. Ось вихід, і він додав до мого архіву лише Один файл, той, що не має пробілів у назві файла___ C: \ Programs \ zippers \ 7-Zip> (pushd "C: \ c: \ Programs \ zippers \ 7-Zip \ 7z .exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ G \ gattaca_7mp 3_zefen \ gattaca - 03 the one moment.mp3" "popd) 7-Zip 4.65 Copyright (c) 1999-2009 Ігор Павлов 2009 Сканування Оновлення архіву c: \ $$ - edrive \ FGH.7z Помилка: Не вдається відкрити файл FGH.7z.tmp Доступ заборонено. Системна помилка: невизначена помилка ===== Найголовніше, можливо, помилка в доступі відхилена?
PrincessPooleRulz

Чи можете ви додавати кілька прикладних рядків (з пробілами і без) зі свого фактичного списку списку до свого запитання вище?
Каран

добре, тому я замінив усі пробіли крапками у файлах файлів, але не в назвах шляхів, які я зараз спробую. вихід все ще: C: \ Programs \ zippers \ 7-Zip> (______ pushd c: _______ c: \ Programs \ zippers \ 7-Zip \ 7z.exe ac: \ $$ - edrive \ FGH.7z "$$ - edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-. starcraft.vs.south.park.mp3 "_______ popd________) ________ Сканування оновлення архіву c: \ $$ - edrive \ FGH.7z Помилка: не вдається відкрити файл FGH.7z.tmp Доступ заперечується. Системна помилка: невизначена помилка
PrincessPooleRulz

"Я замінив усі пробіли крапками у назви файлів" - Значить, ви перейменували фактичні файли чи просто відредагували файл списку? Пробіли і в імені файлів, і в шляхах мають бути добре, див. Мою редагування вище (тобто зі списку видаліть C: \ та поставте лапки навколо всіх контурів). Тепер ви повинні мати можливість використовувати 7z безпосередньо замість обходу мого пакетного файлу.
Каран

1. Я перейменував обидва = = = = = = = 2. Я змінив ваші зміни, але це все ще не працює з 7z = = = = = = = 3. $$ - edrive \ - справді єдиний головний каталог. = = = = = 4. Повідомлення про помилки = = = = = ПОПЕРЕДЖЕННЯ для файлів: = = = = = $$ - edrive: Система не може знайти цей файл. = = = = = = = = = = "$$ - edrive: Система не може знайти цей файл. = = = = = = = = = = ПОПЕРЕДЖЕННЯ: Неможливо знайти 2 файли = = = = = C: \ Програми \ zippers \ 7-Zip> = = = = = зауважте, що є два попередження, а друге починається з однієї подвійної цитати ... Непарно?
PrincessPooleRulz

0

7-Zip побачить їх як дублікати незалежно, і пропустить їх. Якщо є спосіб обійти це, я його ніколи не знайшов - я завжди просто розбиваю роботу на кілька архівів.


чи знаєте ви, як зберігати структуру папок, зберігаючи файли в архів? Кажуть, це за замовчуванням, але це НЕ.
PrincessPooleRulz

@ user194767 - Я використовую такий командний рядок: %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempде ZDIRшлях до 7-Zip і ZIPдиск призначення.
MT_Head

0

Не знаєте, як допомогти з дублікатами. Однак, я думаю, що більш зручною системою, ніж партія з повною командою для кожного, було б створення listfile.txt:

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

А потім стисніть їх усі 7z a -r -tzip archive.zip @listfile.txt


0

Я створив сценарій bat для використання з totalcmd "tot-zip.bat":

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

Потім у totalcmd створіть ярлик для нього: введіть тут опис зображення

Потім, коли ви хочете скопіювати деякі файли / папки та зберегти структуру папок відносно %TOP_DIR%вас, просто виберіть потрібні файли (десь усередині %TOP_DIR%) та натисніть кнопку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.