GNU tar(1)
ma ciekawą opcję o nazwie --transform
. Ze strony podręcznika:
--transform, --xform EXPRESSION
użyj sed replace EXPRESSION do transformacji nazw plików
Umożliwia to przekształcanie nazw ścieżek w locie podczas rozpakowywania archiwum, abyś mógł kontrolować, gdzie i jak zostanie on rozpakowany.
Moje pytanie brzmi: czy istnieje sposób przeprowadzenia podobnej transformacji in situ ; tzn. bez rozpakowywania archiwum?
Przykład
[user@host]$ tar tf test.tar
./foo/blah ./foo/bleh
[user@host]$ some_deep_magic 's/foo/bar/' test.tar
[user@host]$ tar tf test.tar
./bar/blah ./bar/bleh
Przypadek użycia
Dystrybuuję tar
archiwum w zasadzie dla użytkowników końcowych, którzy nie mają pojęcia, i chciałbym, aby wyodrębnił je na właściwą ścieżkę bez ingerencji ode mnie. Staram się unikać trywialnego rozwiązania wypakowywania archiwum, zmiany nazw katalogów i przepakowywania, ponieważ archiwum jest duże.
Odpowiedzi:
Możesz zamontować archiwum za pomocą archivemount lub mountavfs i ponownie je utworzyć
operacje zapisu w systemie plików archiwum dokonają pełnego przepisania na umount, więc nie wydają się dobrą opcją dla dużych plików.
EDYTOWAĆ
Nie znam szczegółów implementacji, ale wydaje mi się, że zapisujemy pliki zapisu do systemu plików.
Po prostu przetestuj, aby rozwiązać kolesie (ponad tar mojego / usr)
Wynik:
Więc Avfs wygrywa! .
źródło