pliki tar z innego katalogu bez ich kopiowania

10

To powinno być bardzo proste dla ekspertów tutaj.

Mam konto Linux z przydziałem dysku użytkownika wynoszącym tylko 6 GB. W folderze danych jest /optokoło 3 GB danych, a po skompresowaniu pojawia się 1 GB. Wewnątrz jest kilka dowiązań symbolicznych data-folder. Zwykle przy wykonywaniu kopii zapasowej pracy wykonałem następujące czynności.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

Teraz zużyłem już 2,5 GB miejsca na dysku użytkownika, mam tylko tyle miejsca, aby skopiować pliki do domu, ale nie do tartego ponownie.

Czy jest jakiś sposób na tar i skopiowanie folderu za pomocą jednego polecenia, powiedzmy za pomocą potoku.

PS Nie mogę się zalogować, /optponieważ mam dostęp tylko do odczytu /opt.

Kamath
źródło
Na pewno możesz wpakować / opt, nie możesz tam pisać , to wszystko. Flaga „f” dla tar (3) mówi o zdeponowaniu wyniku w tym pliku, który może równie dobrze być gdzie indziej. Tj cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Odpowiedzi:

5

Chcesz utworzyć plik tar z dala od miejsca, w którym znajdują się pliki, które potrzebujesz?

Istnieje wiele sposobów, aby to zrobić.

Jeśli ma zostać utworzony lokalnie (= na tym samym komputerze):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

Możesz dodać dodatkowe pliki lub katalogi do tar na końcu tego polecenia.

Jeśli ma zostać utworzony zdalnie (tzn. Chcesz utworzyć plik tar na hoście zdalnym z hosta zawierającego dane, które mają być wytarowane):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

Późniejsza wersja jest bardzo wszechstronna. Na przykład można również „zduplikować” katalog + katalogi przy użyciu tej samej techniki:

Zduplikuj katalog + podkatalogi do innego katalogu lokalnego:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

Zduplikuj katalog + podkatalogi do innego katalogu zdalnego:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

Upuść „v”, jeśli nie potrzebujesz, aby wyświetlać pliki, ponieważ są one tarowane (lub nieoprawione): wtedy pójdzie znacznie szybciej, ale nie powie dużo, chyba że wystąpi błąd.

Używam „. / ...” dla źródła, aby zmusić tar do zapisania go jako ścieżki względnej. W niektórych przypadkach będziesz chciał dodać dodatkowe informacje o ścieżce:

Na przykład, aby spakować pliki crontab, w tym plik w / etc, możesz:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

Używam celowo ścieżki względnej: niektóre STARE wersje tar mogą być niebezpieczne i wyodrębniać pliki z ich oryginalną ścieżką GLOBALNĄ, co oznacza, że ​​możesz to zrobić: cd /safedir ; tar xvf sometara pliki z nazwami globalnymi nadpisują pliki w ich oryginalnej ścieżce, która jest NA ZEWNĄTRZ / Safedir i nie pod spodem! Bardzo niebezpieczne i wciąż możliwe, ponieważ istnieją tam stare serwery produkcyjne. Lepiej jest przez cały czas używać względnych ścieżek, nawet jeśli używasz nowszej tar.

Olivier Dulac
źródło
kolejna nie dotyczy różnic między smołami: na niektórych możesz potrzebować użyć -cvfzamiast cvf, inni nie rozpoznają -stylu. I zzwykło oznaczać „kompresuj za pomocą„ kompresji ””, ale w „najnowszej” wersji tar oznacza „kompresuj za pomocą gzip”. Można wiedzieć, który jest używany na kompresji pliku z: file zefile. A następnie odpowiednio zmień jego nazwę (jeśli używasz tar compress, powinna zostać przemianowana .tar.Z, a nie .tar.gz)
Olivier Dulac
0

Użyj -hopcji tar. Ze strony podręcznika:

-h, --dereference
don't archive symlinks; archive the files they point to

więc możesz użyć tar -zcvfh data-folder.tar.gz /opt/data-folder

harish.venkat
źródło
Och, powinienem o tym wspomnieć, już próbowałem tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder. Mam problem z archiwum cyklicznym. Ciągle kopiuję niektóre pliki i nigdy się nie kończy.
Kamath,
Wygląda na to, że w podfolderze danych znajduje się okrągłe łącze symboliczne.
Kamath,
2
@AUZKamath, to błąd w tar GNU. Możesz bsdtarzamiast tego spróbować lub pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz), który
wykryłby
1
@AUZKamath Możesz jednocześnie tarować i usuwać pliki z katalogu domowego, tar -rf <tarfilename> <filename>aby dodać je do istniejącego pliku tar.
harish.venkat
1
@Stephane Chazelas, działa, powinieneś postawić to jako odpowiedź.
Kamath,