שאלה זפת מובילים קו נטוי


msgstr "-.

זה יוצר קבצים זפת עם מוביל ". /" אשר מאוחר יותר הופך לבעיה כאשר השרת צריך לחלץ חלקים של זפת.

מישהו יכול להגיד לי איך לארוז את זה כך רגיל לא מוביל ". /"?


4
2017-12-12 15:41




למה הוא מוביל ./ בעיה? - chutz
לקחת * במקום ., אלא אם כן אתה צריך לכלול קבצים וספריות ב Dir הנוכחי מתחיל עם נקודה. - ott--


תשובות:


לנסות את --xform אפשרות, המשתמשת בביטוי החלפה דמוית sed. זה מאפשר לך לשנות את הפניות הנתיב נכנס לארכיון ולא לטפל בו במהלך החילוץ (כגון עם - רכיבי סטריפ).

tar --exclude=.gitignore -cz --xform s:'./':: -f dist.tgz ./

לרשימת הקבצים בעת עיבודם, הוסף את -v ו --show-transformed-name אפשרויות:

tar --exclude=.gitignore -cvz --xform s:'./':: --show-transformed-name -f dist.tgz ./

הטיעון לעבור -xform עוקב אחר המבנה הזה: s/regexp/replace/[flags]  שים לב שבדוגמה שלי השתמשתי : כמחנה; אתה יכול להשתמש בכל תו שאתה רוצה כל עוד אתה משתמש בו באופן עקבי. התייחסות טובה כאן.


6
2017-10-09 15:17



אם אין לך זפת עם --xform, אז אולי יש לך את pax(1) במקום זאת, עם אפשרות דומה. - Phil P
--xform s:'./':: לא עבדה בשבילי, הנקודה עדיין היתה שם
הייתי חייב לעשות זאת: s:\\./\\?:: (ללא סימן השאלה אז הספרייה עדיין יהיה שם אמנם ריק)
זה שובר symlinks


ישנן מספר דרכים להשיג זאת, שרבים מהם כבר רמז בשאלה זו, שחלקם לא. זה הניסיון שלי לקמפל את כולם (עם הפניות) ולהראות דוגמאות לקריאה קלה, המאפשר לקורא לבחור ולבחור אחד שיתאים לצרכים שלו או שלה.


דוגמה עץ קלט

זהו המבנה אשר עומד להיות בדוגמאות הבאות.

.dotfile
dir/
  .hidden
  file.txt
root.txt

POSIX (Cross- פלטפורמה, Cross-Shell) פתרון

ייתכן שתוכל להשתמש בשימוש pax במקום זפת, כמו פיל פ. ציין.

התנהגות רגילה:

$ pax -wzvf ../ball.tar.gz .
[…]
$ pax -zf ../ball.tar.gz
.
./.dotfile
./dir
./dir/.hidden
./dir/file.txt
./root.txt

אין קו נטוי:

$ pax -wzvf ../ball.tar.gz -s ':^\./::' .
[…]
$ pax -zf ../ball.tar.gz
.
.dotfile
dir
dir/.hidden
dir/file.txt
root.txt

פגז פגז (חוצה פלטפורמה) פתרון

ייתכן גם שתוכל להשתמש * במקום ., כמו ott-- ציין. פתרון זה הוא ביסודו של דבר טופס קצר של chutz תשובה, שכן הקליפה תרחיב את הכוכבית בדוגמה הבאה לכל הקבצים שאינם מוסתרים לפני העברת אותם יחד כמו ארגומנטים tar תכנית.

אין נקודה- slash (אבל לציין את רמת השורש חסר .dotfile)

$ tar -czvf ../ball.tar.gz *
[…]
$ tar -tzf ../ball.tar.gz
dir/
dir/.hidden
dir/file.txt
root.txt

אם לא אכפת לך אריזה dot קבצים ב- CWD, סיימת.

אם אתה לעשות ללא שם: טיפול, אתה לא ללא חזרה. על קליפות רבות (למשל bash) ייתכן שיהיה ניתן לכלול קבצי dot ב glob הקליפה על ידי שינוי אפשרות פגז. עם bash, זה נעשה עם shoptYou

דוטלוב

אם מוגדר, באש כולל שמות קבצים המתחילים ב- '.' בתוצאות הרחבת נתיב.

$ shopt -s dotglob  # Include dot-files in pathname expansions
$ tar -czvf ../ball.tar.gz *
[…]
$ shopt -u dotglob  # Restore shell's default globbing behavior
$ tar -tzf ../ball.tar.gz
.dotfile
dir/
dir/.hidden
dir/file.txt
root.txt

GNU (לינוקס) פתרון

להשתמש --xform כפי שצוין בירדן בוניטיס תשובה.

התנהגות רגילה:

$ tar -czvf ../ball.tar.gz .
[…]
$ tar -tzf ../ball.tar.gz
./
./root.txt
./.dotfile
./dir/
./dir/file.txt
./dir/.hidden

אין קו נטוי:

$ tar -czvf ../ball.tar.gz --xform 's:^\./::' . [--show-transformed-names|--show-stored-names]
[…]
$ tar -tzf ../ball.tar.gz
./
root.txt
.dotfile
dir/
dir/file.txt
dir/.hidden

BSD (Mac OS X) פתרון

להשתמש - s, אשר דומה באופן מטעה ל pax/sed, אבל לא ממש, כפי שמוצג להלן.

התנהגות רגילה:

$ tar -czvf ../ball.tar.gz .
[…]
$ tar -tzf ../ball.tar.gz
./
./.dotfile
./dir/
./root.txt
./dir/.hidden
./dir/file.txt

אין קו נטוי:

$ tar -czvf ../ball.tar.gz -s '/.//' .
tar: Removing leading '/' from member names
[…]
$ tar -tzf ../ball.tar.gz 
.dotfile
dir/
root.txt
dir/.hidden
dir/file.txt

4
2018-03-23 22:59





לא בטוח איזו גירסה של tar זה, אבל בדרך כלל אתה צריך לציין אילו קבצים אתה רוצה ארכיון. כמו tar c . לדחוס הכל בספרייה המקומית. הפעלת הפקודה שלך על המחשב שלי אני מקבל:

tar: Cowardly refusing to create an empty archive

אז, אם אתה לא רוצה לקבל את המוביל ./, וזה מה שאתה מקבל כאשר אתה דוחס את הספרייה המקומית ., אתה יכול פשוט לציין את הקבצים ישירות. לדוגמה:

> tar c hosts fstab | tar tv
-rw-r--r-- root/root      1225 2012-10-20 13:37 hosts
-rw-r--r-- root/root       678 2012-05-13 22:09 fstab

2
2017-12-12 15:45





אני השתמשתי tar -P כדי לשמר את המוביל / (ולא ./) זה לא לגמרי ברור אם זה יעזור במקרה שלך, אם כי.

-P, --absolute-names
    don't strip leading '/'s from file names 

זפת אדם


1
2017-12-12 15:59



'gzignore' '. - Aram
מה? כן, לזרוק P שם וקוראים לזה טוב. - Aaron Copley


בגירסאות הישנות של זפת, הוא נהג להשתמש בשמות נתיב מלא שסיפקת, בזפת, אבל זה איכשהו בעייתי כפי שאולי תרצה עותק שני של משהו הרחבה לא מכוונת של ארכיון זפת בימים הפורמט הישן, עשוי להחליף קובץ קיים או קבצים.

לכן, בגרסאות העדכניות ביותר של בינארית זפת, מופץ כמעט בכל הפצה לינוקס, מכניס את. / בתחילת כל קובץ זה חבילות, כך, הרחבה לא מכוונת, מרחיב את הארכיון לספריית העבודה הנוכחית שלך ומטה.

אני לא בטוח למה זה גורם לבעיה כזו בשבילך. אם אתה ברמה הספרייה הנכונה, שם אתה רוצה להרחיב את הארכיון הזה, זה יעשה בדיוק את זה. לדוגמה, נניח שיש לך קובץ בשם

/tmp/myarchive.tar

ו נניח את התוכן של הארכיון הם

./etc/hosts
./etc/profile
./etc/passwd
./etc/group

אם תרחיב את הארכיון הזה כאשר ספריית העבודה הנוכחית שלך היא / (כלומר רמת השורש), קבצים אלה ימשיכו להחליף את הקיים

/ etc / hosts
/ etc / פרופיל
/ etc / passwd
/ etc / group

אם זה מה שאתה רוצה, יש לך את זה. אבל נניח, אתה רק רוצה את המארחים קבצים מתוך ארכיון זה, אבל פתאום אתה נמחק פרופיל passwd וקבצים קבוצתיים. מקווה שיש לך גיבוי טוב בשלב זה, כך שתוכל לקבל אותם בחזרה

אבל, אם אתה סוג של sysadmin, אשר נמנע להיות ברמת השורש, אלא אם הוא / היא צריכה את זה בכוונה, אתה כנראה מחובר ב ans ממוקם תחת / home / some-user או אם אתה מחובר כמו שורש, אתה נמצאים בספריה / root. נניח ב / שורש שלך. כאשר אתה מבצע את הפקודה

# tar -xvf /tmp/myarchive.tar

אתה בסופו של דבר עם

/ root / etc / hosts
/ root / etc / profile
/ root / etc / passwd
/ root / etc / group

שום נזק, לא עבירה. לאחר מכן

# mv / root / etc / hosts / etc / hosts

ווילה. השגת את המטרה שלך.


1
2017-12-12 16:05



אתה יכול גם להשתמש tar -C / כדי לחלץ את רמת השורש בלי ללכת לשם. - chutz
כן, אני רואה את זה .. הדוגמה שלי היתה להסביר את הסיכונים של נתיבים מוחלטים לעומת יחסית. - MelBurslan
ניסיתי את כל מה שכתבת כאן. אני לא צריך שבילים מוחלטים. אני צריך יחסית לתיקייה שנתתי אבל בלי להוביל '. - Aram
./ מציין תיקייה יחסית. אז אתה לא צריך לדאוג - MelBurslan