Linux 从文件列表中获取输入的Tar存档
我有一个包含我想用tar存档的文件列表的文件。 我们称之为Linux 从文件列表中获取输入的Tar存档,linux,unix,archive,tar,Linux,Unix,Archive,Tar,我有一个包含我想用tar存档的文件列表的文件。 我们称之为mylist.txt 它包括: file1.txt file2.txt ... file10.txt 有没有一种方法可以发出TAR命令,将mylist.txt作为输入? 差不多 tar -cvf allfiles.tar -[someoption?] mylist.txt 这样就好像我发出了这个命令: tar -cvf allfiles.tar file1.txt file2.txt file10.txt 假设GNU tar(因为
mylist.txt
它包括:
file1.txt
file2.txt
...
file10.txt
有没有一种方法可以发出TAR命令,将mylist.txt
作为输入?
差不多
tar -cvf allfiles.tar -[someoption?] mylist.txt
这样就好像我发出了这个命令:
tar -cvf allfiles.tar file1.txt file2.txt file10.txt
假设GNU tar(因为这是Linux),您需要-T
或--files from
选项。是:
tar -cvf allfiles.tar -T mylist.txt
在Solaris上,可以使用选项-I从文件中读取通常在命令行中声明的文件名。与命令行不同的是,这可以创建包含数十万个文件的tar归档(就是这样做的) 下面的例子是
tar -cvf allfiles.tar -I mylist.txt
您还可以插入可能有用的文件名:
find /path/to/files -name \*.txt | tar -cvf allfiles.tar -T -
tar的某些版本,例如,HP-UX上的默认版本(我测试了11.11和11.31),不包括用于指定文件列表的命令行选项,因此一个不错的解决方法是:
tar cvf allfiles.tar $(cat mylist.txt)
在AIX上,它的工作原理如下:
tar -L List.txt -cvf BKP.tar
tar手册页对于这个选项(至少在Redhat5.4到6.3版本中):“-T:获取要从文件F中提取或创建的名称”。“提取或创建”听起来似乎适用于将文件从tar归档中取出,但不将其放入。
-X
exclude选项从旧的Unix tar命令中保留下来,但显然-I(include)没有!很少有man
页面包含EXAMPLES
部分,尽管它是一个示例。请参阅。此选项也存在于FreeBSD 10上的“bsdtar 3.1.2”中。如果.txt文件列表非常大,该怎么办?应该将xarg命令与tar-r一起使用。。而不是焦油c@嗯,我不认为列表的长度对这个方法有多重要。事实上,我认为这种方法比xargs好,因为xargs会反复运行tar来追加数据,但我还没有真正测试过这些方法。当使用管道时,操作系统会在管道两侧创建流,并同步数据的产生和消耗。文件列表可能是无限的。您可以使用Raspberry Pi Zero对整个internet进行tar/gz,前提是管道末端有足够的存储空间。@Stpihane如果这样做,例如find/path/to-name'*.txt'-exec tar-cvf all.tar{}\+
您会遇到麻烦,因为find
会对连续的文件子集多次执行tar命令。只有最后一个子集会在存档中,因为它会为每个tar执行重新创建。我的一个与pigz一起使用的行程序:find/path/to/files-name'*.log*.\tar-cvf--T-| pigz-9>logs.tgz
uooc(不必要地使用cat
),只需$(请注意,如果mylist.txt
较大,这可能会超过命令行的最大长度。在这种情况下,tar-T我希望我可以在mylist.txt中添加注释。是否有任何解决方法可以使用mylist.txt中的某个tar选项?@Stphane很简单,使用--exclude标志允许这样做。假设您的注释行以“#”开头,下面这样的命令将忽略/排除在包含cmments的行上尝试的任何文件操作,也就是说,您的命令可以如下所示:tar-cvf allfiles.tar--exclude='^#'-T mylist.txt.tar报告错误,但是当您检查tar存档时,没有错误,并且列表中的所有文件都在您的存档中。指出这个命令是针对linux变体的,对于sunOS或其他变体上的,请查看下面的其他答案。例如,对于sunOS,我测试过两个选项:tar-cvf file.tar-I list.txt和tar-cvf file.tar$(cat list.txt)-L mylist.txt
,在AIXHow上如何进行tar而不包括完整路径?