I have a following structure:
-folder1
-folder2
-file1
-file2
-folder3
-folder4
-folder5
-file3
-file4
使用bash我需要创建一个.tar存档 in the actual directory ,它将包含4个文件(file1,file2,file3,file4) . 我尝试过的所有内容都会根据路径存档文件 . 我需要的只是文件的存档,必须包含:
file1
file2
file3
file4
5 回答
如果您知道文件名及其目录,则可以使用
-C
/--directory
选项让tar在处理参数时更改其操作目录 .所以这个命令:
将在当前目录中仅使用其中的文件创建
files.tar.gz
.如果需要,您可以使用一些脚本自动创建
find
输出或类似的必要命令行参数 .(你不能在文件参数位置使用像
folder1/folder2/*
这样的globs,因为这些文件名中的路径会导致tar
无法找到它们 . 你可以在那个位置使用$(ls folder1/folder2/)
,但对于许多有效的文件名来说显然是不安全的 . )简单的解决方案是创建到/ tmp的硬链接,然后从那里存档,如下所示:
请注意,仅当/ tmp和〜/ folder1位于同一文件系统上时,硬链接才有效 . 这只会产生链接而不会占用额外的磁盘空间 .
您可以先删除rm命令 . 你的脚本中的类型可能会有不好的结果:-) .
由于
tar
是为存储目录结构而构建的,如果你不保留它们,你必须先删除它们......为此,您可以创建临时目录以在一个uniq级别存储符号链接:
诺塔:
$PWD
forcefind
将整个路径链接到临时目录 .-h
选项tar
告诉他存储指向文件而不是符号链接 .试试这个而不创建任何临时目录:
来自man pax:
您可以创建存档,然后更改目录并附加到它(使用
r
选项),而不是必须创建笨拙的链接或没有通配符,如下所示:请注意,我在子shell中执行上述操作以避免之后返回
cd
.