我有很多文件名列在名为 的 .txt 文件中to_be_archived_files.txt
,其内容如下:
~/Documents/dir1/a.html
~/Documents/dir1/b.html
~/Documents/dir1/c/1.html
如何将它们全部添加到archive.tar.gz
by 中柏油?
我想要这样的东西:
tar czf archive.tar.gz -FROM-FILELIST=to_be_archived_files.zip
我怎样才能做到这一点?
答案1
使用该-T
选项:
-T, --files-from FILE
get names to extract or create from FILE
请注意,它不能用~
作主目录的别名,您需要明确指定文件夹。
答案2
您需要~
首先将其替换为您的主目录。假设您的主目录不包含:
(它们通常不包含,否则无法在 中引用/etc/passwd
):
(cd / &&
sed "s:^~:$HOME:" | pax -w | gzip) < file.list > file.tar.gz
或者,如果您tar
是 GNU 的,或者bsdtar
:
(cd / &&
sed "s:^~:$HOME:" | tar -T - -zcf -) < file.list > file.tar.gz
其他一些人则没有tar
这样做。为此使用一个参数 ( )。-I
-T
star
list=-
star cvf - list=-
请注意,在上面的解决方案中,除了 之外star
,如果该列表中的任何文件的类型为目录,则包含这些目录的全部内容。
要仅存档目录而不存档其内容,请使用pax
添加-d
选项,使用 GNUtar
或bsdtar
该--no-recursion
选项(也-n
使用bsdtar
)。
使用star
,要包含目录的内容,请添加该-dodesc
选项。