Başka bir dizindeki dosyaları kopyalamadan tar


10

Buradaki uzmanlar için bu çok basit olmalı.

Kullanıcı disk kotası yalnızca 6GB olan bir Linux hesabım var. /optSıkıştırılmış 1GB olduğunda yaklaşık 3GB veri içeren bazı veri klasörleri vardır . İçinde bazı sembolik bağlantılar var data-folder. Genellikle bir iş yedeği almak için aşağıdakileri yapardım.

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

Şu anda kullanıcı disk kotamda 2,5 GB kullandım, dosyaları evime kopyalamak için yeterli alanım var, ancak tartekrar değil .

Bir boru kullanarak klasörü tek bir komutla katlayıp kopyalamanın herhangi bir yolu var mı?

PS: Katlanamıyorum /optçünkü sadece okuma erişimim var /opt.


Kesinlikle / opt'a katılabilirsin , oraya yazamazsın , hepsi bu. Katran (3) 'f' bayrağı sonucu başka bir yerde olabilen bu dosyaya koymayı söyler. Yani cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Yanıtlar:


5

Bir tar dosyası oluşturmak istediğiniz yerden uzakta bir tar dosyası oluşturmak ister misiniz?

Bunu yapmanın birçok yolu var.

Yerel olarak oluşturulacaksa (= aynı makinede):

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

Bu komutun sonunda tar öğesine ek dosyalar veya dizinler ekleyebilirsiniz.

Uzaktan oluşturulacaksa (örn. Tar dosyasını, taranacak verileri içeren bir uzak ana bilgisayardan oluşturmak istiyorsunuz):

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

Daha sonraki versiyon çok yönlüdür. Örneğin, aynı tekniği kullanarak bir dizini + alt dizinleri "çoğaltabilirsiniz":

Bir dizini + alt dizinleri başka bir yerel dizine çoğaltma:

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

Bir dizini + alt dizinleri başka bir uzak dizine çoğaltın:

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

Dosyaları katranlı (veya yıldızsız) olarak görüntülemek için gerekmiyorsa 'v' yi bırakın: daha sonra daha hızlı gidecek, ancak bir hata olmadığı sürece fazla bir şey söylemeyecektir.

Kaynak için tar'ı BAĞIL yolu olarak saklamak için ". / ..." kullanıyorum. Bazı durumlarda ek yol bilgileri eklemek istersiniz:

Örneğin, / etc dosyasındaki crontab dosyalarını tarlamak için şunları yapabilirsiniz:

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

Göreli yolu bilerek kullanıyorum: katranın bazı OLD sürümleri tehlikeli olabilir ve orijinal GLOBAL yolu ile dosyaları ayıklayabilir, yani şunları yapabilirsiniz: cd /safedir ; tar xvf sometarve global adlara sahip dosyaların orijinal yollarında / safedir DIŞINDA olan dosyaların üzerine yazmasını sağlayın ve altında değil! Çok tehlikeli ve hala eski üretim sunucuları olduğu için mümkün. Daha yeni bir katran kullansanız bile, göreli yolları her zaman kullanmak daha iyidir.


diğeri katranlar arasındaki farklarla ilgili değil: bazıları -cvfyerine kullanmanız gerekebilir cvf, diğerleri -stili tanımaz . Ve z" 'kompres' ile kompres" anlamında kullanılmaktadır, ancak 'son' katran üzerinde o "gzip ile kompres" anlamına gelir. Sen bir dosyada kullanılan sıkıştırma bilebilir: file zefile. Ve sonra buna göre yeniden adlandırın (katranınız kullanılıyorsa compress, .tar.gz değil .tar.Z olarak daha iyi adlandırılmalıdır)
Olivier Dulac

0

-hKatran seçeneğini kullanın . Man sayfasından:

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

böylece kullanabilirsiniz tar -zcvfh data-folder.tar.gz /opt/data-folder


Ohh bundan bahsetmeliydim, tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder'ı zaten denedim. Bir çeşit dairesel arşiv problemine giriyorum. Bazı dosyaları kopyalamaya devam ediyorum ve hiç bitmiyor.
Kamath

Verilerin bir alt klasöründe dairesel bir sembolik bağlantı var gibi görünüyor.
Kamath

2
@AUZKamath, bu GNU katranında bir böcek. Bunun bsdtaryerine denemek isteyebilirsiniz , ya da pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz) döngüleri tespit eder
Stéphane Chazelas

1
@AUZKamath tar -rf <tarfilename> <filename>Varolan tar dosyasına eklemek için aynı anda giriş dizininizdeki dosyaları tar ve kaldırabilirsiniz .
harish.venkat

1
@Shanehane Chazelas, cevap olarak koymalısın.
Kamath
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.