
Ich versuche, ein grafisches Programm für mein Skript zu erstellen.
Innerhalb des Skripts verwende ich Tar, um ein Tar-Archiv zu erstellen.
Vom grafischen Programm erhalte ich den vollständigen Namen der Datei, für die ich ein Tar-Archiv erstellen möchte.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Mein Tar-Archiv umfasst Home, Benutzername, Verzeichnis1, Verzeichnis2 und ausgewähltes Verzeichnis, während ich möchte, dass Tar nur ein Archiv erstellt, das ausgewähltes Verzeichnis enthält.
Antwort1
Sie können hierzu die -C
folgende Option verwenden:tar
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
Aus der Manpage von tar
:
-C directory
In c and r mode, this changes the directory before adding the following files.
In x mode, change directories after opening the archive but before extracting
entries from the archive.
Antwort2
Es gibt zwei Methoden, mit denen Sie dieses Problem angehen können.
Die erste Möglichkeit ist meiner Meinung nach einfacher. Einfach cd
in das Verzeichnis direkt über dem, das Sie komprimieren möchten. In diesem Fall wäre das dir2
.
$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir
Die zweite Möglichkeit besteht darin, die Option zu verwenden --transform
, die einen Ausdruck annimmt sed
und ihn für die Dateinamen ausführt. Hinweis: Sie müssen /
im sed
Ausdruck ein Escapezeichen verwenden.
$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
Antwort3
Gehen Sie zunächst in das Arbeitsverzeichnis.
cd /your/working/directory/
Dann benutze Magie *
:-)
tar -cvf temp.tar *
Antwort4
Um dieses Punktverzeichnis zu vermeiden, können Sie es nachträglich entfernen:
tar czC /path/to/dir . --transform='s,^\./,,' >| foo.tgz
Dadurch wird ein Archiv erstellt, das nur dieInhaltvon /path/to/dir
.