Символические ссылки и 7zip

18

Я пытаюсь сжать папку в архив .7z. Эта папка содержит символические ссылки на некоторые другие вещи вне папки (как каталоги, так и файлы).

Видимо 7zip просто архивирует саму ссылку, а это не то, что я намеревался. Есть ли способ сообщить 7zip, что я хочу, чтобы он архивировал материал, на который он ссылается, а не саму ссылку? (То есть, если есть имя символической ссылки, fooкоторое указывает на C:\stuff\foo, я хочу, чтобы оно включало C:\stuff\fooкаталог в архив вместо foo, а не 0-байтовую символическую ссылку.))

Есть ли разумный обходной путь, кроме добавления файлов и папок, о которых идет речь? Существует около 10000 файлов, на которые ссылаются через символические ссылки, поэтому добавление их всех по отдельности займет несколько часов ... Может быть, есть программа, которая создает промежуточную папку с реальными файлами в ней, а затем передает ее в 7zip. Или просто архиватор, который лучше обрабатывает символические ссылки.

Я использую Windows Vista. Все ссылки являются символическими ссылками (например, созданы с помощью mklink link targetи mklink /D link target).

РЕДАКТИРОВАТЬ:

dir вывод команды для меньшего тестового каталога:

C:\...>dir
 Volume in drive C is OS
 Volume Serial Number is 0A3D-CD6E

 Directory of C:\...

09/04/2010  18:12    <DIR>          .
09/04/2010  18:12    <DIR>          ..
09/04/2010  18:10               975 real file.txt
09/04/2010  18:11    <SYMLINK>      test file.txt [..\test file.txt]
               2 File(s)            975 bytes
               4 Dir(s)   5,214,355,456 bytes free

Создание 7z архива этого с 7zip приводит real file.txtк включению, но test file.txtдобавляется как 0-байтовый файл, хотя файл, на который ссылаются, существует и имеет размер 50 КБ.

Огненный Лансер
источник
Какую ОС вы используете?
Чарльз Гарджент
2
Разве тег "windows" не предполагает, что я использую, ну, окна ...
Fire Lancer
1
Хорошо, какую версию окон вы используете?
Чарльз Гарджент
@Fire Lancer: Вообще, хорошая идея повторять любую информацию из тегов в тексте. Легче читать, и не все смотрят на теги (так как они внизу). Кроме того, теги могут быть склонны к недоразумениям. Например, я могу быть на Linux, но хочу взаимодействовать с Windows, поэтому я помечаю свой вопрос как "windows".
Слеське
1
Что ж, может показаться, что 7z архивирует каталоги <SYMLINKD> и <JUNCTION>, но не файлы <SYMLINK>, так что я думаю, если вы сможете вставить все ваши файлы в каталог и символическую ссылку, чтобы они работали
hova

Ответы:

13

Видимо 7zip просто архивирует ссылку саму по себе, а это не то, что я намеревался. Есть ли способ сказать 7zip, что я хочу, чтобы он архивировал то, на что он ссылается, а не саму ссылку?

Нет, видимо, нет (к сожалению). На самом деле на 7zip есть сообщение об ошибке: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481 , но он был открыт в августе 2009 года , и не трогали , так как: - /.

В противном случае есть ли что-то разумное, кроме добавления файлов и папок, о которых идет речь? Включая материал через символьную ссылку, вы получите около 10 000 файлов, большая часть которых - через символические ссылки, поэтому добавление их всех по отдельности займет несколько часов ...

Что ж, если у вас достаточно места (и времени), вы можете сделать копию папки, заменив символические ссылки их целями. Вы можете, например, использовать Robocopy и его переключатель/sl :

/ sl Копирует символическую ссылку вместо цели


Примечание: Просто , чтобы избежать путаницы, к сведению , что Linux сборка p7zip (порт 7zip) также имеет двоичный , 7zкоторый делает поддержку архивации файла символические точки ссылка (переключатель -l). Тем не менее, 7zip на Windows не имеет этого переключателя.

sleske
источник
Поскольку это утвержденный ответ, хочу указать, что фактический 7zip делает это -lпереключателем. zip и gzip тоже делают со своими конкретными командами.
m3nda
@ erm3nda, где вы видите этот переключатель? Пожалуйста, предоставьте ссылку.
Отметить
linux.die.net/man/1/7z Существует опция l, а также переключатель с той же буквой. Я отмечаю, что эта опция отсутствует в версии программного обеспечения для Windows.
m3nda
@ erm3nda: Да, но это p7zip, порт 7zip. Спасибо за указание на это; Я обновил свой ответ.
Слёске
И тебе спасибо. Не могу поверить, что в Windows отсутствует эта функция. Даже если символические ссылки в Windows отличаются друг от друга, не пытайтесь понять, почему сложно заставить их работать.
m3nda
-1

Если вы используете Vista и выше, удалите символические ссылки и замените их на mklinks

mklink /D Directory FullPathToRealDirectory

Обратите внимание, что mklink довольно мощный и может включать ссылки на сетевые ресурсы и тому подобное.

Так как в этом есть некоторая путаница, позвольте мне уточнить. Я предполагаю, что ОП на самом деле говорит о соединениях, как показано здесь http://en.wikipedia.org/wiki/NTFS_junction_point . Mklink не делает соединения . Это делает ИСТИННЫЕ символические ссылки, и я попробовал это сам, и 7zip уважает их. Кроме того, вы должны быть администратором для создания символических ссылок mklink.

 Directory of C:\temp\t

04/08/2010  04:50 PM    <DIR>          .
04/08/2010  04:50 PM    <DIR>          ..
04/08/2010  04:31 PM    <SYMLINKD>     GB [c:\users\testuser]    <-- created by mklink
04/08/2010  04:50 PM    <JUNCTION>     GB2 [\??\c:\users\testuser] <-- created by junction
04/08/2010  04:29 PM                 8 test.txt

7zip будет архивировать ГБ, но НЕ будет архивировать ГБ2. РЕДАКТИРОВАТЬ: На самом деле дальнейшее тестирование показывает, что 7zip будет архивировать обе директории, используя версию 4.65. Так что я понятия не имею, в чем проблема.

хова
источник
1
Учитывая, что все исходные символические ссылки были созданы с помощью Microsoft API и mklik, что это решает, кроме того, как переделать одно и то же?
Fire Lancer
2
-1 Как это решить проблему? Вы просто описываете, как создавать символические ссылки.
слеске
@hova: Да, это все правда (хотя MS обычно называет только символические ссылки «символическими ссылками»; соединения никогда не называют «символическими ссылками»). Но как это связано с вопросом?
Слеське
7zip архивы SYMLINKD (mklink) каталоги!
Hova
1
Я только что провел некоторое тестирование с 7zip v15.14 (64-битной) в Windows 7, и кажется, что 7zip теперь следует символическим ссылкам каталога, но сохраняет только пустой файл для файловых ссылок - что не очень полезно.
Bigue Nique