如何将多个文件(在另一个文件中列出)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?的主要内容,如果未能解决你的问题,请参考以下文章