root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
Як я можу вирішити цю проблему та зберегти /імена файлів?
-C /при його вилученні.
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
Як я можу вирішити цю проблему та зберегти /імена файлів?
-C /при його вилученні.
Відповіді:
Використовуйте --absolute-namesабо -Pпараметр, щоб вимкнути цю функцію.
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /параметра, описаного у відповіді @Marcus, позбудеться повідомлення STDERR, якщо це ваша основна мета.
Це насправді особливість, а не проблема. Архів з абсолютним розташуванням становить загрозу безпеці. Зловмисники можуть використовувати такі архіви, щоб обманути користувачів встановити файли у критичних системних місцях.
Так, ви можете використовувати -P. Але що поганого в тому, щоб дозволити tar видалити просунуту косу рису і просто вимагати від користувача архіву явно робити вилучення в кореневому каталозі? Тоді вони свідомо впливають на критичні локації системи, і не можуть це зробити випадково.
tar. Це конкретне повідомлення змусило tarвийти зі статусом 1, який змусив мене отримувати помилкові сповіщення електронною поштою про успішні резервні копії, просто тому, що tarписав це повідомлення в STDERR. Я cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P- наприклад, якщо ви надаєте якусь функцію знімка файлової системи в FUSE. Час від часу, можливо, ви захочете знімати знімок у певному каталозі, а не cwdз точки зору користувача.
Якщо ви хочете , щоб позбутися від «Вилучення ведущего` /» з імен »друкуються в STDERR, але все - таки хочуть залишити від цього провідного слеша , як дьоготь мудро робить за замовчуванням, я побачив відмінне рішення тут на коментатор timsoft.
Рішення передбачає використання опції -C для зміни каталогу в root (/), а потім визначення дерева файлів для архівації без ведучого косого риса, тому що зараз вам потрібен лише відносний шлях. Це робить те саме, що і звичайна команда створення tar, але зачистка не потрібна:
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*), оскільки оболонка не знає про змінений корінь. Але все ж хороша відповідь для інших випадків.
-C /не працює для мене, період. Це не заважає мені бути більш жорстким.
На місяць пізніше, але я знайшов найбільш підходяще рішення для мого випадку (у сценарії оболонки) - це перейти до батьківського каталогу та виконати команду там.
cd /var/www/
tar -czf mysite.gz mysite
Замість:
tar -czf /var/www/mysite.gz /var/www/mysite
Це, як я зробив це за допомогою грубої сили методу: 2>&1 | grep -v "Removing leading".
Наприклад:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tarкоманда може повернутися 2до фатальної помилки.
Я вирішив цю проблему за допомогою:
cd /home/foo && tar czf ~/backup.tar.gz .
таким чином ви не намагаєтесь в першу чергу поставити абсолютні шляхи до архіву смоли. Якщо ви хочете, щоб він просто знімав його в корені файлової системи
cd / && tar xzf backupt.tar.gz після його передачі.