2011-01-01 14 views
14

smoła na katalogu mydir archiwizuje ukryte pliki i podkatalogi, ale ukryte smołę z ciągumydir z * zamiennika nie będzie. Czy jest to długotrwała i znana niespójność lub błąd?archiwizacji (ubuntu tar) ukrytych katalogów

Edit (informacje dodatkowe): tar od wewnątrz mydir asterisk nie będzie „widzieć”, ani archiwum ukryte pliki i podkatalogi ukryte w natychmiastowej katalogu. Jednak w niewidocznych podkatalogach mydir ukryte pliki i ukryte podkatalogi będą archiwizowane.

Odpowiedz

4

Odpowiedź jest taka, że ​​* wieloznaczny jest obsługiwane przez powłokę i po prostu nie rozszerza się do rzeczy, które zaczynają się od kropki. Inny znak wieloznaczny ? również nie rozszerza się na rzeczy, które zaczynają się od kropki. Dzięki Keithowi za wskazanie, że jest to powłoka, która robi ekspansję i nie ma nic wspólnego z tar.

Jeśli użyjesz shopt -s dotglob, wówczas rozszerzenie będzie zawierać takie elementy, jak .filename. Dzięki dla Andy'ego.

Użyj shopt -u dotglob, aby go wyłączyć.

Przełączanie opcji dotglob nie zmienia samej wartości ls. Raczej po prostu zmienia zachowanie ekspansji, jak pokazano w czymś takim jak ls *.

+0

To interesujące, ale czy można to pokazać w przykładowym poleceniu? – felwithe

24

Z symbolem wieloznacznym nie będzie działać. Musisz określić. (aktualny katalog), jeśli masz na myśli pełny katalog zawierający ukryte pliki. Można zrobić

tar -cvpzf test.tgz . 
+6

Należy jednak uważać na umieszczenie nowego tar w tym samym katalogu, w którym odbywa się tarowanie. Możesz dostać się do nieprzyjemnej pętli. – Keith

+7

tar cvpfz test.tgz --exclude = *. Tgz. – H2ONaCl

+0

Tak, to zadziała –

3

Powłoka rozszerza symbole wieloznaczne tak smoła nawet nie widzę. Musisz dodać je jawnie, jeśli chcesz to zrobić. (.*). Jednak najczęściej atakuje się pojedynczy katalog, więc gdy go rozwiążesz, wszystko idzie w to samo miejsce.

+0

+1 za wskazanie, że jest to spowodowane powłoką, a nie tar. –

+0

Właściwie tar na. * Pójdzie w górę (prawdopodobnie tak wysoko, jak root), więc prawdopodobnie nie chcesz tego robić. – H2ONaCl

+0

Korekta: nie tak wysoka jak root. – H2ONaCl

1
shopt -s dotglob 

to uczyni

+6

Witamy w StackOverflow! Czy zapomniałeś zakończyć wiadomość? –

+0

Keith wyjaśnia tę odpowiedź w jednym ze swoich komentarzy. – H2ONaCl

5

Można użyć:

tar -cvpzf test.tgz * .??* 

Ale to działa tylko dla ukrytych plików z nazwami> 2 ('' w celu zapobiegania i '..')

1

można skompresować wszystkie pliki/foldery w bieżącym katalogu (w tym .hidden) za pomocą:

tar -zcvf compressed.tgz `ls -A -1` 

Ostatni argument to foldery, które chcesz skompresować. Jeśli go podasz ls -A -1, podajesz wszystkie foldery w bieżącym katalogu, ale . i ... Jeśli chodzi o podkatalogi, pliki .hidden są domyślnie uwzględnione w kompresji.

Powiązane problemy