Mam spakowany plik jak myArchive123.tar.gz
. Wewnątrz zawiera folder podobny dohelloWorld
Jeśli go rozpakuję: tar -xf myArchive123.tar.gz
otrzymam helloWorld
folder:
ls
myArchive123.tar.gz
helloWorld
Chciałbym, aby wyjście miało taką samą nazwę jak nazwa pliku minus rozszerzenie .tar.gz. To znaczy:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Czy można to zrobić?
- Nigdy nie wiem, co jest w archiwum. Może to być folder, może być wiele plików.
- Byłbym w porządku, używając innego narzędzia, jeśli tar nie może tego zrobić.
- Byłbym w porządku z dłuższą formą, którą można przekształcić w skrypt
EDYCJA
W międzyczasie zhakowałem sobie skrypt, który wydaje się, że wykonałem zadanie. (patrz moja opublikowana odpowiedź poniżej). Jeśli można to poprawić, prosimy dodawać komentarze / dodatkowe odpowiedzi. Najważniejsze jest to, że powinien on być pakowany w jedno-liniowy materiał, taki jak:
extract <file>
Odpowiedzi:
Za
gnu tar
pomocą--xform
(lub--transform
) możesz dodać/prefix/
do nazwy każdego pliku:uwaga nie ma wiodących
/
wprefix/
ased
końce wyrażenia zS
wykluczyć symboliczne cele link z przekształceń nazw plików.Aby to przetestować (na sucho):
Na początek znajdziesz bardzo uproszczony skrypt, który możesz wywołać jako
extract <file>
:źródło
Cóż, możesz to zrobić przynajmniej w kilku krokach. Jeśli tak
spełniłoby to zadanie, choć może być jeszcze bardziej zwięzła odpowiedź.
źródło
Edytować
Akceptowana odpowiedź jest krótsza niż poniżej. (zrób to samo, ale zwykle krótszy jest zwykle lepszy).
W końcu zhakowałem sobie skrypt dla tego zadania. współpracuje z .tar .tar.gz i .gz
Stosowanie:
Uwaga: to rozwiązanie może zawierać kropki w nazwie pliku. Np. Eclipse-4.5M-SDK.tar.gz.
Trzymam skrypt w moim repozytorium git. Aby uzyskać najnowszą wersję, zobacz: https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here
źródło
Jeszcze jednym możliwym rozwiązaniem jest użycie
--transform
opcji:Z twoimi plikami:
źródło
--strip-components=0
po prostu usuwa nazwę pierwszego katalogu ze ścieżki, a przy-C
opcji zapisuje pliki zarchiwizowane w nowym katalogu.