2013-04-10 87 views
12

我有一堆目录需要恢复,但他们必须首先打包到一个.tar。有没有一个脚本可以让我将所有100多个目录打包到他们自己的tar目录中,使目录变成dir.tar。为每个目录创建一个tar文件

迄今为止尝试:

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

如果有一种明确列出它们的方法...是的。 – tink 2013-04-10 20:45:35

+0

如果这有助于实现这一目标,他们将独自在他们自己的目录中。 – 2013-04-10 20:48:22

+2

可能意味着要告诉你的是,SO不是“为我写剧本”网站。你试过什么了? – 2013-04-10 20:53:20

回答

31

,你写的,如果你有一个目录名的一些空间,将无法工作,因为名字将被分割,并且如果它们存在于将tar文件的脚本这个级别。

您可以使用此命令可以列出目录,不递归:

find . -type d -maxdepth 1 -mindepth 1 

,这一个对每个人进行焦油

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

加入''删除存档后的原始目录:'find。 -maxdepth 1 -mindepth 1 -type d -exec tar cvf {} .tar {} --remove-files \;' – 2016-07-13 18:30:40

+6

compress'find。 -type d -maxdepth 1 -mindepth 1 -exec tar zcvf {} .tar.gz {} \;' – 2016-11-30 19:28:18

5

,你有带空格的任何目录名在那个级别?如果没有,你的脚本将工作得很好。

我最常做的是写一个脚本我想执行呼应了命令:

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

然后你可以看一下输出,看看它做你想要什么。在确定该程序可行后,编辑命令行并删除echo命令。

1

如果目录的数量是非常大的,他们的名字都太长

的语句号执行一个

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

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

1

如果有后目录名称中的空格,然后只需将变量放在双引号内:

for i in * 
do 
    tar czf "$i.tar" "$i" 
done 
相关问题