为每个目录创建一个tar文件

时间:2013-04-10 20:43:58

标签: linux bash shell

我有一堆需要恢复的目录,但必须先将它们打包成.tar。是否有一个脚本允许我将所有100多个目录打包到他们自己的tar中,因此dir变为dir.tar。

到目前为止尝试:

for i in *; do tar czf $i.tar $i; done

5 个答案:

答案 0 :(得分:44)

如果目录名中有一些空格,那么您编写的脚本将无法工作,因为该名称将被拆分,如果它们存在于此级别,它也会tar文件。

您可以使用此命令以递归方式列出目录:

find . -type d -maxdepth 1 -mindepth 1

和这个在每一个上执行tar:

find . -type d -maxdepth 1 -mindepth 1 -exec tar cvf {}.tar {}  \;

答案 1 :(得分:6)

您是否在该级别有任何包含空格的目录名称?如果没有,您的脚本将正常工作。

我通常做的是用我想要执行的命令编写一个脚本:

$ for i in *
do
    echo tar czf $i.tar $i
done

然后你可以查看输出,看看它是否正在做你想要的。在确定程序可以运行后,编辑命令行并删除echo命令。

答案 2 :(得分:2)

如果目录名中有空格,则只需将变量放在双引号中:

for i in *
 do
     tar czf "$i.tar" "$i"
 done

答案 3 :(得分:1)

如果目录数量非常大且名称太长

执行第一号陈述后

  for i in *
    do
     echo tar czf $i.tar $i
    done

你会收到错误“字符串太长”

答案 4 :(得分:1)

通过 GNU Parallel 并行完成所有任务:

parallel tar -cf {}.tar {} ::: *

如果您想在不做任何实际操作的情况下检查它会做什么,请像这样添加--dry-run

parallel --dry-run tar -cf {}.tar {} ::: *

示例输出

tar -cf ab.tar ab
tar -cf cd.tar cd