符号链接和7zip


18

我正在尝试将文件夹压缩为.7z存档。该文件夹包含指向该文件夹外其他内容的符号链接(目录和文件)。

显然7zip只是将链接本身存档了,这不是我想要的。有没有办法告诉7zip我要它存档链接到的内容,而不是链接本身?(也就是说,如果有一个符号链接名称foo指向C:\stuff\foo,我希望它C:\stuff\foo在归档文件中包含目录而不是foo,而不是0字节的符号链接。)

除了添加有问题的文件和文件夹之外,是否有任何合理的解决方法?通过符号链接引用了大约10,000个文件,因此将它们单独添加会花费几个小时……也许有一个程序可以创建一个包含实际文件的暂存文件夹,然后将其传递给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

创建包含7zip的7z归档文件会real file.txt被包括在内,但test file.txt会添加为0字节文件,尽管链接到的文件确实存在并且为50KB。


您正在使用哪个操作系统?
Charles Gargent

2
“ windows”标签是否暗示我正在使用窗户?
Fire Lancer 2010年

1
好的,您使用的是哪个版本的Windows?
Charles Gargent

@Fire Lancer:通常,重复文本标签中的所有信息是一个好主意。易于阅读,并非所有人都看他的标签(因为它们在底部)。另外,标签可能容易引起误解。例如,我可能在Linux上,但想与Windows互操作,所以我将问题标记为“ windows”。
sleske 2010年

1
好吧,看来7z会存档<SYMLINKD>和<JUNCTION>目录,而不是<SYMLINK>文件,所以我想您是否可以将所有文件都偷偷进入目录并进行符号链接
将于

Answers:


13

显然7zip只是将链接存档为自身,这不是我想要的。有没有办法告诉7zip我也要它归档链接的内容,而不是链接自身的内容

不,显然不是(不幸的是)。实际上,关于7zip的错误报告要求这样做:http : //sourceforge.net/tracker/? func=detail&aid=2846755&group_id=14481&atid=114481, 但该报告于 2009年8月打开,自:-/以来没有被提及。

除添加有问题的文件和文件夹外,是否存在合理的解决办法?通过symlink包括东西,大约有10000个文件,其中很大一部分是通过symlinks进行的,因此将它们全部单独添加将花费数小时...

好吧,如果您有足够的空间(和时间),则可以复制该文件夹,并将符号链接替换为其目标。您可以使用Robocopy及其开关/sl

/ sl复制符号链接而不是目标链接


注意: 为避免混淆,请注意,Linux构建的p7zip(端口7zip)也具有二进制文件7z,该二进制文件确实支持将符号链接指向的文件存档(switch -l)。但是,Windows上的7zip没有此开关。


因为这是已批准的答案,所以要指出实际的7zip由-l切换台执行。zip和gzip也使用其特定命令。
m3nda 2015年

@ erm3nda您在哪里看到此开关?请提供参考。
标记

linux.die.net/man/1/7z有一个选项l,并且还有一个带有相同字母的开关。我注意到该选项在Windows版本的软件中不存在。
m3nda 2015年

@ erm3nda:是的,但这是p7zip,是7zip的端口。感谢您指出;我更新了答案。
sleske

也谢谢你。无法相信Windows缺少此功能。即使Windows上的符号链接非常不同,也不要弄清楚为什么很难使其工作。
2015年

-1

如果您使用的是Vista及更高版本,请删除符号链接并将其替换为mklinks

mklink /D Directory FullPathToRealDirectory

请注意,mklink功能非常强大,可以包含指向网络共享等的链接。

由于对此似乎有些困惑,请允许我澄清一下。我假设OP实际上是在谈论交界处,如http://en.wikipedia.org/wiki/NTFS_junction_point所示。Mklink不建立连接。它制作了TRUE符号链接,我自己尝试了一下,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将存档GB,但不会存档GB2。编辑:实际上进一步测试显示7zip将使用4.65版归档两个目录。所以我不知道问题是什么。


1
既然所有orig符号链接都是使用Microsoft API和mklik进行的,那么除了重新制作相同的东西之外,这还能解决什么问题?
Fire Lancer 2010年

2
-1如何解决问题?您仅描述了如何创建符号链接。
sleske 2010年

@hova:是的,这是完全正确的(尽管MS通常只将符号链接称为“符号链接”;结点从未称为“符号链接”)。但这与问题有什么关系?
sleske 2010年

7zip存档SYMLINKD(mklink)目录!
hova 2010年

1
我刚刚在Windows 7上使用7zip v15.14(64位)进行了一些测试,似乎7zip现在遵循目录符号链接,但仅存储文件符号链接的空文件-这不是很有用。
Bigue Nique
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.