tar: Jak utworzyć plik tar z dowolnymi wiodącymi katalogami bez cd do katalogu macierzystego

23

Powiedzmy, że mam katalog plików na

/home/user1/dir1

i chcę utworzyć tar z samym katalogiem wiodącym: „dir1”:

/dir1/file1
/dir1/file2

Wiem, że mogę najpierw cd do katalogu

cd /home/user1/
tar czvf dir1.tar.gz dir1

Ale podczas pisania skryptów przeskakiwanie z katalogu do katalogu nie zawsze jest korzystne. Zastanawiam się, czy można to zrobić za pomocą ścieżek bezwzględnych bez zmiany bieżących katalogów?

Wiem, że zawsze mogę utworzyć plik tar z absolutnymi ścieżkami WEWNĄTRZ i używać

--strip-components 

podczas wyodrębniania, ale czasami dodatkowe nazwy ścieżek są dodatkowymi prywatnymi informacjami, których nie chcesz rozpowszechniać wraz z plikami tar.

Dzięki!

Yan
źródło

Odpowiedzi:

24

tar -C zmienia katalog

tar -C /home/user1/ -cvzf dir1.tar.gz dir1

btw, przydatny do śledzenia zmian katalogów ... użyj pushd i popd.

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd
Philip Reynolds
źródło
1
Dzięki. Nie wiedziałem, że należy użyć opcji „-C” przed innymi opcjami… Próbowałem wcześniej „tar -cvzf dir1.tar.gz dir1 -C / home / user1 /”, ale to nie działało.
Yan
1
Nie działa: tar: katalog: Nie można stat: Nie ma takiego pliku lub katalogu (zakładając, że katalog1 znajduje się w katalogu / home / user1 /)
tribbloid
21

Za pomocą gnu tar możesz stworzyć archiwum z innym katalogiem podstawowym niż w rzeczywistości z:

tar -c --transform 's,^\.,mybasedir,' .

Po prostu dostosuj wyrażenie sed do swoich potrzeb.

Christophe Drevet-Droguet
źródło
5

OK, też to odkryłem

tar -czvf file1.tar.gz /home/user1/dir1/../dir1

działało też tak, jak chciałem.

Yan
źródło
Chociaż symbole wieloznaczne, takie jak „*”, nie działają
Curtis Yallop,
2
tar -C /home/user1/dir -c .
Michael Graff
źródło