Nie twórz pliku tar w katalogu, który pakujesz:
tar -czf /tmp/workspace.tar.gz .
załatwia sprawę, poza tym, że po rozpakowaniu rozpakuje pliki w całym bieżącym katalogu. Lepiej zrobić:
cd ..
tar -czf workspace.tar.gz workspace
lub, jeśli nie znasz nazwy katalogu, w którym byłeś:
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(Zakłada się, że nie podążałeś za dowiązaniami symbolicznymi, aby dotrzeć do miejsca, w którym się znajdujesz i że powłoka nie próbuje odgadnąć Cię ponownie, przeskakując wstecz przez łącze symboliczne - bash
nie jest godna zaufania pod tym względem. Jeśli musisz się o to martwić, użyj cd -P ..
do wykonania fizycznego katalogu zmian. Głupie, że nie jest to domyślne zachowanie w moim odczuciu - mylące przynajmniej dla tych, dla których cd ..
nigdy nie miało żadnego innego znaczenia.)
Jeden komentarz w dyskusji mówi:
Muszę [...] wykluczyć katalog główny i [...] muszę umieścić plik tar w katalogu podstawowym.
Pierwsza część komentarza nie ma większego sensu - jeśli plik tar zawiera bieżący katalog, nie zostanie on utworzony podczas wypakowywania pliku z tego archiwum, ponieważ z definicji bieżący katalog już istnieje (z wyjątkiem bardzo dziwnych okoliczności ).
Z drugą częścią komentarza można sobie poradzić na dwa sposoby:
- Albo: utwórz plik w innym miejscu -
/tmp
jest to jedna możliwa lokalizacja - a po zakończeniu przenieś go z powrotem do pierwotnej lokalizacji.
- Lub: jeśli używasz GNU Tar, użyj
--exclude=workspace.tar.gz
opcji. Ciąg po =
znaku jest wzorcem - przykład jest najprostszym wzorcem - dokładnym dopasowaniem. Może być konieczne określenie, --exclude=./workspace.tar.gz
czy pracujesz w bieżącym katalogu wbrew zaleceniom; może być konieczne określenie, --exclude=workspace/workspace.tar.gz
czy przechodzisz o jeden poziom wyżej, zgodnie z sugestią. Jeśli masz wiele plików tar do wykluczenia, użyj „ *
”, jak w --exclude=./*.gz
.