我正在尝试为我的脚本创建一个图形程序。
在脚本中,我使用tar创建tar存档。
从图形程序中,我获得了要创建tar存档的文件的全名。
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
我的tar归档文件包括home,用户名,dir1,dir2和selecteddir,而我希望tar创建的归档文件仅包括selecteddir。
我正在尝试为我的脚本创建一个图形程序。
在脚本中,我使用tar创建tar存档。
从图形程序中,我获得了要创建tar存档的文件的全名。
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
我的tar归档文件包括home,用户名,dir1,dir2和selecteddir,而我希望tar创建的归档文件仅包括selecteddir。
Answers:
您可以使用-C
选项tar
来完成此操作:
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
从手册页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.
dirname
用来提取所有内容,直到“ selecteddir”并basename
提取“ selecteddir”。尝试使用$ path作为参数的两个命令。
tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
将无法正常工作。
您可以使用两种方法来解决此问题。
我认为第一个比较容易。只需cd
直接进入要压缩的目录上方的目录即可。在这种情况下应该是dir2
。
$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir
第二种方法是使用--transform
带有sed
表达式并针对文件名运行它的选项。注意:您必须/
在sed
表达式中转义。
$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
tar: Cowardly refusing to create an empty archive
。当我有点时,它会令人讨厌地使根目录包含名为的目录.
。因此,接近但不完美。
$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
为我工作。使用星号代替点.
。更新:糟糕-尽管我丢失了隐藏文件。
实际上,我使用Ketan的答案发现了问题
tar -C / home /用户名/ dir1 / dir2 -cvf temp.tar selecteddir
如果只想复制dir2中的所有文件,而只复制所有文件,那么我首先想到:
tar -C / home /用户名/ dir1 / dir2 -cvf temp.tar *
但是,当您不在dir2目录中时,这将引起问题,因为*将tar文件存储在当前目录中。我使用下面的命令解决了这个问题:
tar -C /home/username/dir1/dir2 -cvf temp.tar ./
.
为根文件夹。