Linki symboliczne i 7zip

18

Próbuję skompresować folder do archiwum .7z. Ten folder zawiera symboliczne linki do niektórych innych elementów poza folderem (zarówno katalogów, jak i plików).

Najwyraźniej 7zip archiwizuje sam link, co nie jest moim zamierzeniem. Czy istnieje sposób, aby powiedzieć 7zip, że chcę zarchiwizować rzeczy, do których prowadzi, a nie sam link? (To znaczy, jeśli istnieje nazwa dowiązania symbolicznegofoo która wskazuje C:\stuff\foo, chcę, aby zawierał C:\stuff\fookatalog w archiwum zamiast foo, a nie 0-bajtowe dowiązanie symboliczne.)

Czy istnieje jakieś uzasadnione obejście oprócz dodawania danych plików i folderów? Istnieje około 10 000 plików przywoływanych za pomocą dowiązań symbolicznych, więc dodanie ich wszystkich osobno zajęłoby godziny… Może jest program, który tworzy folder pośredni z prawdziwymi plikami w nim, a następnie przekazuje go do 7zip. Lub tylko archiwizator, który lepiej obsługuje dowiązania symboliczne.

Korzystam z systemu Windows Vista. Wszystkie linki są symbolicznymi linkami (np. Utworzone za pomocąmklink link target i mklink /D link target).

EDYTOWAĆ:

dir wynik polecenia dla mniejszego katalogu testowego:

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

Utworzenie tego archiwum 7z z włączeniem 7zip powoduje dodanie pliku, real file.txtale test file.txtjest dodawany jako plik 0-bajtowy, chociaż plik z nim powiązany istnieje i ma rozmiar 50 KB.

Lansjer ognia
źródło
Z jakiego systemu operacyjnego korzystasz?
Charles Gargent,
2
Czy tag „windows” nie sugeruje, że używam, no cóż, Windows ...
Fire Lancer
1
Ok, jakiej wersji systemu Windows używasz?
Charles Gargent,
@Fire Lancer: Ogólnie dobrym pomysłem jest powtarzanie dowolnych informacji z tagów w tekście. Łatwiejszy do odczytania i nie wszyscy patrzą na tagi (ponieważ są na dole). Ponadto tagi mogą być podatne na nieporozumienia. Np. Mogę być w systemie Linux, ale chcę współpracować z systemem Windows, więc oznaczam pytanie „windows”.
śleske
1
Wygląda na to, że 7z archiwizuje katalogi <SYMLINKD> i <JUNCTION>, ale nie pliki <SYMLINK>, więc myślę, że jeśli uda ci się podkraść wszystkie swoje pliki do katalogu i dowiązania symbolicznego, że to zadziała
hova

Odpowiedzi:

13

Najwyraźniej 7zip po prostu archiwizuje link, który nie jest moim zamierzeniem. Czy istnieje sposób, aby powiedzieć 7zip, że chcę, aby zarchiwizował także rzeczy, które łączy, a nie łącze samo w sobie

Nie, najwyraźniej nie (niestety). W rzeczywistości istnieje raport o błędzie dotyczący 7zip z żądaniem: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481, ale został otwarty w sierpniu 2009 r. I nie został zmieniony od: - /.

Jeśli nie, czy jest jakieś uzasadnienie poza dodawaniem plików i folderów? Uwzględniając zawartość za pośrednictwem dowiązania symbolicznego, istnieje około 10 000 plików, z których duża część odbywa się za pośrednictwem dowiązań symbolicznych, więc dodanie ich wszystkich zajęłoby wiele godzin ...

Cóż, jeśli masz wystarczająco dużo miejsca (i czasu), możesz wykonać kopię folderu, zastępując dowiązania symboliczne ich celami. Możesz np. Użyć Robocopy i jego przełącznika /sl:

/ sl Kopiuje dowiązanie symboliczne zamiast celu


Uwaga: Żeby uniknąć nieporozumień, zauważa, że budowa Linuksa p7zip (port 7zip) ma również binarny 7zktóry robi wsparcie archiwizacji złożyć symboliczne dowiązanie (switch -l). Jednak 7zip w systemie Windows nie ma tego przełącznika.

Śleske
źródło
Ponieważ jest to zatwierdzona odpowiedź, chcę wskazać, że faktyczny 7zip robi to za pomocą -lprzełącznika. zip i gzip robią to również z ich konkretnymi poleceniami.
m3nda
@ erm3nda gdzie widzisz ten przełącznik? Proszę podać odniesienie.
zaznacz
linux.die.net/man/1/7z Istnieje opcja l, a także przełącznik z tą samą literą. Zauważyłem, że ta opcja nie występuje w wersji oprogramowania Windows.
m3nda
@ erm3nda: Tak, ale to jest p7zip, port 7zip. Dzięki za wskazanie tego; Zaktualizowałem swoją odpowiedź.
śleske
Ja też dziękuję Nie mogę uwierzyć, że Windows nie ma tej funkcji. Nawet jeśli dowiązania symboliczne w systemie Windows są dość różne, nie zastanawiaj się, dlaczego tak trudno go uruchomić.
m3nda
-1

Jeśli używasz Visty i nowszych wersji, usuń dowiązania symboliczne i zamień je na mklinks

mklink /D Directory FullPathToRealDirectory

Pamiętaj, że mklink jest dość potężny i może zawierać linki do udziałów sieciowych i tym podobne.

Ponieważ wydaje się, że jest w tym trochę zamieszania, pozwólcie, że wyjaśnię. Zakładam, że OP faktycznie mówi o skrzyżowaniach, jak pokazano tutaj http://en.wikipedia.org/wiki/NTFS_junction_point . Mklink nie wykonuje skrzyżowań . Tworzy PRAWDZIWE dowiązania symboliczne i sam spróbowałem, a 7zip szanuje je doskonale. Ponadto musisz być administratorem, aby utworzyć dowiązania symboliczne 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 zarchiwizuje GB, ale NIE zarchiwizuje GB2. EDYCJA: Właściwie dalsze testy pokazują, że 7zip Zarchiwizuje oba katalogi przy użyciu wersji 4.65. Więc nie mam pojęcia, na czym polega problem.

hova
źródło
1
Biorąc pod uwagę, że wszystkie dowiązania symboliczne orig zostały utworzone za pomocą interfejsów API Microsoft i mklik, co to rozwiązuje oprócz remake'u tego samego?
Fire Lancer
2
-1 Jak to rozwiązuje problem? Po prostu opisujesz, jak tworzyć dowiązania symboliczne.
śleske
@hova: Tak, to wszystko prawda (chociaż stwardnienie rozsiane zwykle nazywa tylko dowiązania symboliczne „dowiązaniami symbolicznymi”; połączenia nigdy nie są nazywane „dowiązaniami symbolicznymi”). Ale jak to się ma do pytania?
sleske
7zip archiwizuje katalogi SYMLINKD (mklink)!
hova
1
Właśnie przetestowałem 7zip v15.14 (64-bitowy) na Windows 7 i wydaje się, że 7zip śledzi teraz dowiązania symboliczne do katalogu, ale przechowuje tylko pusty plik dla dowiązań symbolicznych - co nie jest zbyt przydatne.
Bigue Nique,