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 - bashnie 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 -
/tmpjest 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.gzopcji. Ciąg po =znaku jest wzorcem - przykład jest najprostszym wzorcem - dokładnym dopasowaniem. Może być konieczne określenie, --exclude=./workspace.tar.gzczy pracujesz w bieżącym katalogu wbrew zaleceniom; może być konieczne określenie, --exclude=workspace/workspace.tar.gzczy przechodzisz o jeden poziom wyżej, zgodnie z sugestią. Jeśli masz wiele plików tar do wykluczenia, użyj „ *”, jak w --exclude=./*.gz.