Mam następujące polecenie w części skryptu powłoki kopii zapasowej:
tar -cjf site1.bz2 /var/www/site1/
Kiedy wymieniam zawartość archiwum, otrzymuję:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Chciałbym jednak usunąć część /var/www/site1
z katalogu i nazw plików w archiwum, aby uprościć ekstrakcję i uniknąć niepotrzebnej stałej struktury katalogów. Nigdy nie wiem, na wypadek, gdybym wyodrębnił kopie zapasowe witryn w miejscu, w którym nie były przechowywane dane internetowe /var/www
.
W powyższym przykładzie chciałbym mieć:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Tak więc, gdy rozpakowuję, pliki są wyodrębniane w bieżącym katalogu i nie muszę później przenosić wyodrębnionych plików, aby zachować struktury podkatalogów.
Jest już wiele pytań o tar i kopie zapasowe w stackoverflow
innych miejscach w sieci, ale większość z nich prosi o usunięcie całej struktury podkatalogu (spłaszczanie), lub po prostu dodanie lub usunięcie początkowego / w nazwach (nie t wiem, co się dokładnie zmienia podczas wypakowywania), ale nie więcej.
Po przeczytaniu niektórych rozwiązań tu i ówdzie, a także instrukcji, wypróbowałem:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Ale żaden z nich nie działał tak, jak chcę. Niektórzy nic nie robią, inni nie archiwizują już podkatalogów.
Znajduje się w skrypcie powłoki kopii zapasowej uruchomionym przez Crona, więc nie wiem dobrze, który użytkownik go uruchamia, jaka jest ścieżka i katalog bieżący, więc zawsze wszystko wymaga wpisania ścieżki bezwzględnej i wolałbym nie zmieniać bieżącego katalogu aby uniknąć zepsucia czegoś w skrypcie (ponieważ nie tylko tworzy kopie zapasowe stron internetowych, ale także baz danych, a następnie przesyła to wszystko na FTP itp.)
Jak to osiągnąć?
Czy właśnie źle zrozumiałem, jak działa opcja -C?
-C
oznacza po prostu „zmień katalog”, a zastąpienie ścieżki (lub prefiksu) może być wykonane tylko przez --transform
. rif. superuser.com/questions/595510/prepend-prefix-in-tar/595512 możesz w prosty sposób -C (zmienić katalog) i --transformować go: `` tar cjf site1.bz2 --transform "s / ^ \. \ // $ targetbase / "-C / var / www / site1. ``