我正在尝试为我的脚本创建一个图形程序。
在脚本中,我使用 tar 来创建一个 tar 存档。
从图形程序中,我获得了要创建 tar 存档的文件的全名。
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Run Code Online (Sandbox Code Playgroud)
我的 tar 存档包括 home、用户名、dir1、dir2 和 selecteddir,而我希望 tar 创建仅包括 selecteddir 的存档。
mkc*_*mkc 116
您可以使用 的-C选项tar来完成此操作:
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
Run Code Online (Sandbox Code Playgroud)
从手册页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.
Run Code Online (Sandbox Code Playgroud)
rya*_*obs 16
您可以使用两种方法来解决此问题。
在我看来,第一个更容易。只需cd进入您要压缩的目录正上方的目录即可。在这种情况下,它将是dir2.
$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用--transform接受sed表达式并针对文件名运行它的选项。注意:您必须/在sed表达式中转义。
$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
Run Code Online (Sandbox Code Playgroud)
小智 9
首先,进入工作目录,
cd /your/working/directory/
Run Code Online (Sandbox Code Playgroud)
然后使用魔法*:-)
tar -cvf temp.tar *
Run Code Online (Sandbox Code Playgroud)
小智 8
实际上,我使用 Ketan 的回答发现了一个问题
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
当您只想复制 dir2 中的所有文件时,只需复制所有文件,那么我首先提出这个想法:
tar -C /home/username/dir1/dir2 -cvf temp.tar *
但是,当您不在 dir2 目录中时,它会导致问题,因为 * 会在您当前的目录中 tar 文件。我使用下面的命令解决了这个问题:
Run Code Online (Sandbox Code Playgroud)tar -C /home/username/dir1/dir2 -cvf temp.tar ./
为了避免出现点目录,您可以在事后将其删除:
tar czC /path/to/dir . --transform='s,^\./,,' >| foo.tgz
Run Code Online (Sandbox Code Playgroud)
这将创建一个仅包含/path/to/dir.