Chcę spakować katalog X bez jego rodziców

9
tar cvf /var/lib/backup/sample.tar /home/user/.project

Jednak kiedy wyciągam, dostaję także jego rodziców

/backup/
  - /home/
     - /user/
        - .project/

Ta komenda tar wykonuje to zadanie, ponieważ nie zawiera żadnych innych elementów nadrzędnych ( userna przykład innych folderów ).

Chcę to zrobić programowo, więc zmiana bieżącego katalogu roboczego na /home/user/tak naprawdę nie jest opcją. czy jest to możliwe do zrobienia?

Użytkownik 007
źródło

Odpowiedzi:

17

Możesz użyć -Copcji, aby przejść do /home/userkatalogu przed tarowaniem lub użyć --strip-components 2podczas rozpakowywania.

tar cvfC /var/lib/backup/sample.tar /home/user .project
#                              Note the space ^
tar cvf /var/lib/backup/sample.tar /home/user/.project
tar Cxf /backup /var/lib/backup/sample.tar --strip-components 2
Kevin
źródło
1
+1 fajne .. Właśnie znalazłem -Cprzełącznik, gdy przeglądałem stronę podręcznika użytkownika , ale nie mogłem tego zrozumieć. Brzmiało to dla mnie bardziej, jakby był używany podczas Untar. Nauczyłem się czegoś nowego.
Levon
@Kevin Thanks. Opcja C działa bezbłędnie. Dziękuję Ci!
User007
2
Nie mogłem tego tak uruchomić. Według lektury gnu.org/software/tar/manual/tar.html#SEC118 Udało mi się z następującą formą: tar cvf /var/lib/backup/sample.tar -C / home / user .project
Aivar
2

Myślę, że jeśli cdprzejdziesz do katalogu najwyższego poziomu, z którego chcesz utworzyć tarplik, nie powinieneś mieć tego problemu. To znaczy,

cddo useri do targóry .project.. możesz określić miejsce docelowe dla pliku tar tak /var/... jak poprzednio.

Czy jest jakiś powód, dla którego nie chcą / nie cddo user?

Levon
źródło
Tak. To byłoby jedno rozwiązanie. Dzięki. Ale mam nadzieję, że istnieje lepszy sposób? Chcę poradzić sobie z tym programistycznym sojusznikiem i nie chcę os.chdir(base_dir)cały czas wydawać w moim kodzie :) więc byłoby miło, gdyby było jakieś wyjście z tego. Dzięki
User007,
@ User007 Ah .. ok, rozumiem. Możesz zaktualizować swoje pytanie, aby uwzględnić ten wymóg. Przy okazji
fajny
Dzięki. Tak. Właśnie zaktualizowałem moje pytanie. Och, to żeby ukryć moją tożsamość ...
User007
1
@ User007 uwielbia część 007 .. i wygląda na to, że pracujesz również w Pythonie (który jest jednym z moich ulubionych)
Levon
:) Tak. W porządku, nasz przyjaciel Kevinpomógł mi z właściwym rozkazem. Więc dam mu kleszcza. Ale głosowałem cię. Dzięki!
User007