我在 .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)
请注意,它不能用~作主目录的别名,您需要明确指定文件夹。
您需要~先将其替换为您的主目录。假设您的主目录不包含:(它们通常不包含,否则无法在 中引用/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选项,使用 GNUtar或bsdtar那个--no-recursion(也-n使用bsdtar)。
使用star, 要包含目录的内容,请添加-dodesc选项。