Próbuję utworzyć program graficzny dla mojego skryptu.
Wewnątrz skryptu używam tar do utworzenia archiwum tar.
Z programu graficznego otrzymuję pełną nazwę pliku, który chcę utworzyć archiwum tar.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Moje archiwum tar zawiera katalog główny, nazwę użytkownika, katalog1, katalog2 i katalog_wybrany, podczas gdy chcę, aby archiwum utworzyło archiwum zawierające tylko katalog wybrany.
dirname
do wyodrębnienia wszystkiego aż do „selecteddir” ibasename
do wyodrębnienia „selecteddir”. Wypróbuj dwa polecenia z argumentem $ path.tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
nie zadziała.Istnieją dwie metody rozwiązania tego problemu.
Pierwszy, moim zdaniem, jest łatwiejszy. Po prostu
cd
do katalogu bezpośrednio nad tym, który chcesz skompresować. W tym przypadku byłobydir2
.Drugim sposobem jest użycie opcji,
--transform
która przyjmujesed
wyrażenie i uruchamia je względem nazw plików. Uwaga: będziesz musiał uciec/
wsed
wyrażeniu.źródło
tar: Cowardly refusing to create an empty archive
. Kiedy mam kropkę, denerwująco sprawia, że root zawiera katalog o nazwie.
. Tak blisko, ale nie idealnie.$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
pracował dla mnie. Używanie gwiazdki zamiast kropki.
. Aktualizacja: Woops - chociaż straciłem ukryte pliki.Najpierw przejdź do katalogu roboczego,
Następnie użyj magii
*
:-)źródło
Właściwie znalazłem problem z odpowiedzią Ketana
Kiedy chcesz po prostu skopiować wszystkie pliki w katalogu dir2, tylko wszystkie pliki, wtedy najpierw wpadam na pomysł:
Jednakże, gdy nie ma Cię w katalogu dir2, spowodowałoby to problem, ponieważ * zapisuje pliki tar w bieżącym diectroy. Naprawiłem problem za pomocą poniższego polecenia:
źródło
.
jako folder główny.