Ich versuche ein grafisches Programm für mein Skript zu erstellen.
Innerhalb des Skripts benutze ich tar, um ein tar-Archiv zu erstellen.
Aus dem Grafikprogramm erhalte ich den vollständigen Namen der Datei, die ich ein Tar-Archiv erstellen möchte.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Mein tar-Archiv enthält home, username, dir1, dir2 und selecteddir, während ich möchte, dass tar nur Archive einschließlich selecteddir erstellt.
dirname
, um alles bis "selecteddir" und "selecteddir"basename
zu extrahieren. Probieren Sie die beiden Befehle mit dem Argument $ path aus.tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
wird nicht funktionieren.Es gibt zwei Methoden, mit denen Sie dieses Problem angehen können.
Der erste ist meiner Meinung nach einfacher. Einfach
cd
in das Verzeichnis direkt über dem, das Sie komprimieren möchten. In diesem Fall wäre esdir2
.Die zweite Möglichkeit besteht darin, die Option zu verwenden,
--transform
die einensed
Ausdruck aufnimmt und gegen die Dateinamen ausführt. Hinweis: Sie müssen/
densed
Ausdruck mit einem Escapezeichen versehen.quelle
tar: Cowardly refusing to create an empty archive
. Wenn ich den Punkt habe, macht es ärgerlich, dass der Stamm ein Verzeichnis mit dem Namen enthält.
. Also, nah aber nicht perfekt.$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
arbeitete für mich. Verwenden eines Sternchens anstelle eines Punkts.
. Update: Woops - Obwohl ich die versteckten Dateien verloren habe.Wechseln Sie zunächst in das Arbeitsverzeichnis.
Dann benutze Magie
*
:-)quelle
Eigentlich fand ich ein Problem mit Ketans Antwort
Wenn du nur alle Dateien nur in dir2 kopieren willst, nur alle Dateien dann komme ich zuerst auf die Idee:
Wenn Sie sich jedoch nicht im Verzeichnis dir2 befinden, kann dies zu Problemen führen, da * in Ihrem aktuellen Diectroy TAR-Dateien enthalten sind. Und ich habe das Problem mit dem folgenden Befehl behoben:
quelle
.
als Root-Ordner.