tar: a'zolar nomidan olib tashlash `/ 'ni olib tashlash

[email protected] # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names

Ushbu muammoni qanday hal qila olaman va / fayl nomlarini saqlay olaman?

101

7 javoblar

Bu aslida bir xususiyat, muammo emas. Mutlaq joylarga ega bo'lgan arxivlar xavfsizlik xavfi hisoblanadi. Hujumkorlar bu kabi arxivlardan foydalanuvchilarni tanqidiy tizim joylarida fayllarni o'rnatishda qo'llashi mumkin.

Ha, siz -P dan foydalanishingiz mumkin. Lekin tarda oldingi slashni olib tashlashga ruxsat berish va nima uchun arxiv foydalanuvchini ildiz katalogidagi ajratishni aniq bajarish uchun nima qilish kerak? Keyin ular tanqidiy tizim joylariga ongli ravishda ta'sir ko'rsatadi va buni tasodifan qila olmaydi.

74
qo'shib qo'ydi
Menimcha, -P dan foydalanish uchun ba'zi bir holatlar mavjud - masalan, FUSE da fayl tizimining bir nechta ko'rinishini taqdim qilsangiz. Foydalanuvchilarning nuqtai nazari bo'yicha cwd o'rniga ma'lum bir katalogda oniy tasvirni olishni xohlagan paytlaringizdan ba'zilari.
qo'shib qo'ydi muallif Ramon, manba
Ba'zida xususiyatlar muammolar. tar dan nol bo'lmagan chiqish holatida elektron pochta orqali yuboradigan zaxira buyruqni o'rnatganingizdan keyin bu ishni topdim. Bu maxsus xabar tar ga ega bo'lib, 1 holatidan chiqdi va bu menga muvaffaqiyatli zaxira nusxalari haqida noto'g'ri e-pochta orqali ogohlantirish berishga olib keldi, chunki tar bu xabarni STDERR-ga yozgan. Bu muammoni @ Marcus yechimining o'z tweaked versiyasini ishlatgan holda o'zgartirdim: cd/path/to/network/share && tar -cJf scripts.backup.tar.xz -C/home/user/scripts 2>/dev/null || [elektron pochta xabari yuborish]
qo'shib qo'ydi muallif rubynorails, manba

Agar siz "nomdagi nomlardan nomlarni o'chirish" dan STDERR-ga yozilishdan qutulishni istasangiz-da, lekin hali ham shu kabi etakchiliklarni bekor qilishni istasangiz, men juda yaxshi echimga ega bo'ldim. bu erda sharhlovchi tomonidan timsoft.

Yechim katalogni ildizga (/) o'zgartirish uchun -C parametrini ishlatishni, keyin esa faylni daraxtni oldingi holda arxivlash uchun fayl daraxtini belgilashni o'z ichiga oladi, chunki endi siz faqatgina nisbatan yo'lga muhtojsiz. Bu odatiy qo'ziqorin yaratish buyrug'i bilan bir xil narsalarni qiladi, ammo bo'shashmaslik kerak emas:

tar fcz bkup.tar.gz -C/home/foo/
65
qo'shib qo'ydi
U ortib boruvchi zaxiralar bilan ishlamaydi. Lekin yaxshi javob.
qo'shib qo'ydi muallif ericw31415, manba
-C/ men uchun ishlamaydi. Bu men uchun stderrning oldini olmaydi.
qo'shib qo'ydi muallif Dan, manba
@ A-B-B yo'l -C/ning nisbiy ekanligiga ishonch hosil qiling.
qo'shib qo'ydi muallif omermuhammed, manba
Shell kengaytmasi (masalan, tar c-c/home/foo/* ) orqali ko'rsatiladigan tar fayllarini istamasangiz ham ishlamaydi, chunki qobiq o'zgargan ildiz haqida bilmaydi. Lekin boshqa holatlar uchun hali ham yaxshi javob.
qo'shib qo'ydi muallif divided-by-zero, manba
Ushbu ilova ildiz katalogida ruxsatga ega bo'lmasa, ushbu yondashuv ishlaydi?
qo'shib qo'ydi muallif Mladen B., manba

Ushbu funksiyani o'chirish uchun - mutlaq nomlar yoki -P -ni ishlating.

tar fczP bkup.tar.gz /home/foo/

tar fcz bkup.tar.gz --absolute-names /home/foo
49
qo'shib qo'ydi
@ Rubo77 yozganidek, odatda, bu buyruqning kutilgan natijasi emas.
qo'shib qo'ydi muallif Fredy, manba
Bu to'g'ri javob, lekin shuni bilib qo'yingki, ko'p holatlarda bu siz xohlamagan narsa emas , chunki u to'liq yo'llardan olingan arxivga olib keladi!
qo'shib qo'ydi muallif Roudie Rigaud MARCELIN, manba
@Toskan Misollar qo'shilgan
qo'shib qo'ydi muallif Barmar, manba
@MladenB. tar shuningdek, disk raskadrovka vaqtida dastlabki slashni olib tashlaydi. Shunday qilib, arxivni yaratishda ushbu parametrdan foydalansangiz ham, foydalanuvchi uni chiqarayotganda ham foydalanmasa, muammo bo'lmaydi.
qo'shib qo'ydi muallif Barmar, manba
@Marcus "javobida aytib o'tilganidek, -C/ parametrini ishlatish STDERR xabaridan xalos bo'ladi, agar bu sizning asosiy maqsadingiz bo'lsa.
qo'shib qo'ydi muallif user53210, manba
Ko'pincha, bu foydalanuvchining nima istayotgani emas, chunki ularning aksariyati kerak bo'lmagunicha o'qishni o'qimaydi (bunga vaqt yo'q). Demak, hech bo'lmasa sizning javobingizni kengaytirib, odamlarga buni qanday amalga oshirishi kerakligini tushunishdan qat'i nazar, buni qilmasliklarini ogohlantirish oqilona bo'ladi. Ayniqsa, javob sifatida qabul qilinadi.
qo'shib qo'ydi muallif Mladen B., manba
ajoyib, nima uchun bunga misol berilmaydi? Bu buyruqlar qaerga boradi? ohirida? boshlanishi? orasida?
qo'shib qo'ydi muallif Toskan, manba

Bir oy o'tgach, lekin mening ishim uchun eng maqbul echimni topdim (shell skriptida) ota-katga borib u erda buyruqni bajarish kerak.

cd /var/www/
tar -czf mysite.gz mysite

Ning o'rniga:

tar -czf /var/www/mysite.gz /var/www/mysite
23
qo'shib qo'ydi
Men bu savolga qanday javob berishini bilmayman. Bu amalga oshishi mumkin bo'lgan boshqa narsa. ... ... ... Like: Savol: Los-Anjelesdan Nyu-Yorkka qanday qilib boray? A: Buning o'rniga San-Frantsiskoga bor.
qo'shib qo'ydi muallif G-Man, manba
Yordamingiz uchun rahmat. Bu menga kerak edi. Tarballimdagi to'liq yo'lni, faqat maqsad papkani xohlamadim.
qo'shib qo'ydi muallif Michael Tyson, manba
Darhaqiqat, siz buni quyidagicha amalga oshirishingiz mumkin: tar -zcvf mysite.gz -C/var/www/mysite/Buning foydasi siz uni har qanday katalogdan
qo'shib qo'ydi muallif Fredy, manba
Bu, ehtimol, to'g'ri javob sifatida qabul qilinishi mumkin.
qo'shib qo'ydi muallif Mladen B., manba
@alfredocambera bu uchun rahmat (y)
qo'shib qo'ydi muallif amd, manba

This is how I did it by using brute force method: 2>&1 | grep -v "Removing leading".

Misol uchun:

tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v  "Removing leading"
6
qo'shib qo'ydi
@Brian siz chiqish kodini olish uchun $ PIPESTATUS dan foydalanishingiz mumkin. Qarang: unix.stackexchange.com/questions/14270/…
qo'shib qo'ydi muallif kathy13xia, manba
@staticx, xato kodi 0dan qat'iy nazar.
qo'shib qo'ydi muallif Dan, manba
Muammo shundaki, u xato kodini yashiradi. Shunday qilib, agar siz Bash skriptidagi xato kodini tekshirishni xohlasangiz, u muvaffaqiyatga 0 qaytarilmaydi.
qo'shib qo'ydi muallif user39670, manba
@ A-B-B Mening tar buyrug'i muhim xato bo'yicha 2 qaytishi mumkin.
qo'shib qo'ydi muallif Jite, manba

To'liq yo'llar yordamida siqishni oldini olish uchun yo'l uchun -C dan foydalanishga harakat qiling:

[email protected] # tar fcz bkup.tar.gz -C /home/ foo/
1
qo'shib qo'ydi

Men bu muammoni hal qildim:

cd /home/foo && tar czf ~/backup.tar.gz .

Shunday qilib, siz birinchi navbatda tar arxiviga mutlaq yo'llarni qo'yishga harakat qilmayapsiz. Agar siz uni faqatgina fayl tizimining ildizida istamasangiz

cd/&& tar xzf backupt.tar.gz after transferring it.

1
qo'shib qo'ydi