如何使用 tar 压缩 .txt 文件中的一组文件?

AGa*_*yer 6 tar

我在 .txt 文件中列出了很多文件名,to_be_archived_files.txt其内容如下:

~/Documents/dir1/a.html
~/Documents/dir1/b.html
~/Documents/dir1/c/1.html
Run Code Online (Sandbox Code Playgroud)

如何将它们全部添加到archive.tar.gzby tar 中

我想要这样的东西:

tar czf archive.tar.gz -FROM-FILELIST=to_be_archived_files.zip

我怎样才能做到这一点?

Mic*_*alH 10

使用-T选项:

 -T, --files-from FILE
       get names to extract or create from FILE
Run Code Online (Sandbox Code Playgroud)

请注意,它不能用~作主目录的别名,您需要明确指定文件夹。


Sté*_*las 7

您需要~先将其替换为您的主目录。假设您的主目录不包含:(它们通常不包含,否则无法在 中引用/etc/passwd):

(cd / &&
  sed "s:^~:$HOME:" | pax -w | gzip) < file.list > file.tar.gz
Run Code Online (Sandbox Code Playgroud)

或者,如果您tar来自 GNU 或bsdtar

(cd / &&
  sed "s:^~:$HOME:" | tar -T - -zcf -) < file.list > file.tar.gz
Run Code Online (Sandbox Code Playgroud)

其他一些tar-I而不是-T为了那个。为此star使用一个list=-参数 ( star cvf - list=-)。

请注意,在上述解决方案中,除了star,如果该列表中的任何文件是directory类型,则包含这些目录的全部内容。

要仅存档目录而不是其内容,请pax添加-d选项,使用 GNUtarbsdtar那个--no-recursion(也-n使用bsdtar)。

使用star, 要包含目录的内容,请添加-dodesc选项。