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

Ama*_*ith 21 linux bash shell

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

到目前为止尝试:

for i in *; do tar czf $i.tar $i; done
Run Code Online (Sandbox Code Playgroud)

hzr*_*ari 49

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

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

find . -maxdepth 1 -mindepth 1 -type d
Run Code Online (Sandbox Code Playgroud)

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

find . -maxdepth 1 -mindepth 1 -type d -exec tar cvf {}.tar {}  \;
Run Code Online (Sandbox Code Playgroud)

  • 压缩`找到.-type d -maxdepth 1 -mindepth 1 -exec tar zcvf {} .tar.gz {} \;` (10认同)
  • 添加``以在归档后删除原始目录:`find.-maxdepth 1 -mindepth 1-type d -exec tar cvf {} .tar {} - remove-files \;` (3认同)

Dav*_* W. 6

你在那个级别有没有空格的目录名?如果没有,您的脚本将正常工作.

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

$ for i in *
do
    echo tar czf $i.tar $i
done
Run Code Online (Sandbox Code Playgroud)

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