如何将多个文件(在另一个文件中列出)tar 到不同目录中自己单独的 tar?

Posted

技术标签:

【中文标题】如何将多个文件(在另一个文件中列出)tar 到不同目录中自己单独的 tar?【英文标题】:How do I tar multiple files (which are listed in another file) to their own separate tar in a different directory? 【发布时间】:2017-04-18 12:42:13 【问题描述】:

我有以下文件夹结构:

parent/subdir/dir1
parent/subdir/dir2
parent/subdir/dir3
parent/subdir/dir4

我想创建以下内容:

parent/archive/dir1.tgz
parent/archive/dir2.tgz
parent/archive/dir3.tgz
parent/archive/dir4.tgz

文件<dir#> 列在一个名为foo.txt 的文件中,该文件位于parent/

我想创建一个 shell 脚本,它将从 foo.txt 读取每个目录,将它们压缩到新位置,然后删除原始目录。我希望将foo.txt 中的所有目录都制作成一个大的.tgz 文件。有什么帮助吗?

【问题讨论】:

对不起,但不清楚您实际问的是什么...当然,您应该逐行读取文件并将行内容输入tar 命令。这很明显,那么究竟是什么让您在阅读手册页后无法找到自己? 【参考方案1】:

请看看这个脚本是不是你需要的。这个脚本有两个参数。第一个参数是包含目录位置的文件(foo.txt),第二个参数是保存 tgz 文件的位置(parent/archive)。

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
    cd "$2";
    echo -e "Archiving $line";
    tarName="$(basename "$line").tgz";
    tar -zcvf "$tarName" "$line";
    rm -Rf "$line";
    echo -e "Archived $line to $2/$tarName and removed $line";
done < "$1"

【讨论】:

tarName="$(basename "$line").tgz" 会更好 @m13r - 感谢您的意见。我已经更新了脚本。 这很好用!谢谢!我很确定我可以根据需要进行修改,但是有没有办法将所有命令的成功输出到一个新文件中?有人建议我只删除那些运行完成的档案。 @jprx - 如果我正确理解您的问题,您是否要检查存档过程是否完成然后删除? 是的。我想看看归档过程是否完成,如果过程成功,删除。【参考方案2】:

使用 tar -T 标志来指定一个文件,该文件有一个文件列表来创建一个 tar 存档。

【讨论】:

这正是 OP 明确表示他不想想要做的...

以上是关于如何将多个文件(在另一个文件中列出)tar 到不同目录中自己单独的 tar?的主要内容,如果未能解决你的问题,请参考以下文章

在LINUX下如何将tar压缩文件解压到指定的目录下

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

用tar命令对文件中列出的文件进行打包怎么做?

linux第三天

在LINUX下如何将tar压缩文件解压到指定的目录下

tar指令常用选项备忘