Mam .tar
kilka plików ze ścieżką example/super_user/Output.*
.
Wynikowy .tar
wygląda następująco:
+ example
+ super_user
- Output.zip
- Output.xml
- Output.txt
Ale chcę, aby plik wyglądał następująco:
- Output.zip
- Output.xml
- Output.txt
Czy wiesz, jak mogę to osiągnąć, wciąż będąc w innym katalogu?
unix
compression
tar
Der Hochstapler
źródło
źródło
Odpowiedzi:
tar zachowa strukturę plików i folderów, więc nie sądzę, aby istniał sposób na instruowanie tar, aby spłaszczył hierarchię w czasie tworzenia.
Jednym z obejść jest tymczasowa zmiana katalogu, utworzenie tar, a następnie powrót - szybki przykład poniżej:
źródło
Jeśli katalog „example” znajduje się w katalogu głównym systemu plików, oto inny sposób:
spowoduje to zmianę katalogu do punktu, w którym chcesz wykonać tar. Zastrzeżenie polega na tym, że jeśli w katalogu / example / super_user są jakieś podkatalogi, struktura katalogów zostanie zachowana dla tych podkatalogów.
źródło
/home/u/foo/bar
, działa katalog/home/b
, a następnietar -C foo/bar -cvf qiz.tar .
działa dobrze. Jedno zastrzeżenie jest jednak to, że nie można używać symboli wieloznacznych, tjtar -C foo/bar -cvf qiz.tar *.log
,tar -C foo/bar -cvf qiz.tar "*.log"
albotar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
nie będzie działać.-C
wiele razy w jednymtar
poleceniu, jeśli chcesz dodać wiele plików rozmieszczonych w wielu katalogach, ale nadal chcesz, aby plik tar był płaski.Tutaj opublikowałem swoją odpowiedź:
https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure
repost (dla leniwych ppl)
To brzydkie ... ale działa ...
Miałem ten sam problem, ale z wieloma folderami chciałem po prostu wyrównać wszystkie pliki. Możesz użyć opcji „transform”, aby przekazać wyrażenie sed i ... działa zgodnie z oczekiwaniami.
to jest wyrażenie:
's/.*\///g'
(usuń wszystko przed „/”)To jest ostatnie polecenie:
źródło
Aby utworzyć tar (ARCHIVE.tar) ze wszystkimi plikami z katalogu (DIR), bez żadnych informacji o katalogu nadrzędnym (nawet ./), możesz użyć czegoś takiego:
Możesz grać ze znalezieniem, aby ograniczyć głębokość, wybrać określone pliki i wiele innych rzeczy.
Powodzenia!
źródło
-printf
to niestandardowe polecenie. Wiele z nich działa tylko z określonymi wersjami find. Zazwyczaj zaznaczamy te, odpowiadając na pytanie o Super User (np „-blah jest rozszerzeniem GNU i nie będzie działać wszędzie”).Utworzyłem katalog tymczasowy. A w katalogu utworzono dowiązania symboliczne do wszystkich plików do plików, które mają zostać uwzględnione. Potem zrobiłem tar -h -C. tak aby wszystkie pliki (nie linki, ale ich zawartość) były zawarte w archiwum o pożądanej nazwie.
źródło
Jeśli jest to cała zawartość tarballa, możesz użyć
--strip-components
opcji tar GNU, aby usunąć 2 poziomy przed plikami.źródło
--strip-path
ale użycie jej niczego nie zmieni.Innym sposobem na tymczasową zmianę katalogu jest umieszczenie poleceń
cd
itar
w nawiasach(
)
:Zaletą tego jest to, że po zakończeniu blokowania zawsze domyślnie wrócisz do oryginalnego katalogu. tzn. nie ma potrzeby
pushd
...popd
blokowania lub śledzenia, gdziecd
wrócić.źródło
pushd wypycha bieżącą ścieżkę katalogu do
DIR
stosu i przenosi do folderu zawartości. Następnie wróć do oryginalnego katalogu za pomocąpopd
.źródło