如何在目录中创建每个目录tar并保存到不同的localtion

时间:2018-04-20 12:14:46

标签: bash backup tar

我在/ home / path中有多个目录,我想让脚本为每个文件夹制作.tar并保存到另一个位置。

谷歌搜索我发现的是:

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

但我的问题是在.tar中创建/home文件,之后我必须将它们移到另一个需要很长时间的位置。

想要的是,tar文件应该在不在/home/目录中的其他位置创建。

感谢:  阿卡什

3 个答案:

答案 0 :(得分:1)

这个简单的脚本为我工作。

#!/bin/bash
DW=`date +%a`
DM=`date +%d`

cd /home/
for file in *;
do
tar -czvf /databackup_Allin/$DW/home/$file.tar.gz $file;
done

答案 1 :(得分:0)

你试过像这样指定目录吗?

find /home/ -type d -maxdepth 1 -mindepth 1 -exec tar cvf \path\to\directory\{}.tar {} \;

答案 2 :(得分:0)

最后一个参数是tar命令。 {}替换为find命令找到的名称。例如,如果find命令即将与foo/目录一起使用,则{}将替换为foo/。这将允许您指定位置。

SEARCH_DIR=/home
OUTPUT_DIR=/tmp
cd "$SEARCH_DIR" && find . -maxdepth 1 -mindepth 1 -type d -exec tar cvf "$OUTPUT_DIR/{}.tar" {} \;

进一步打破这个:

  • cd "$SEARCH_DIR" - 将当前目录更改为OUTPUT_DIR(本例中为/home 1
  • &&更改目录后,请执行以下操作......
  • find . - 搜索当前目录 1
  • 中的内容
  • -maxdepth 1 -mindepth 1 - 不要递归深度超过一个级别(顶级,与执行ls相同)
  • -type d - 仅输出目录(忽略文件)
  • -exec - 根据之前的过滤器选项find遇到的每个实体运行以下命令
  • tar cvf /tmp/{}.tar {} - 执行tar命令以创建(详细)文件/tmp/{}.tar(其中{}替换为当前找到的实体find)并且仅包括{}find找到的直接/实体
  • 的内容
  • \; - 告诉find这是-exec命令的结尾

总之,此命令会将$SEARCH_DIR中的每个目录tar到$OUTPUT_DIR中相应命名的文件。

  1. 当前目录很重要,因为find的输出将第一个参数作为其输出的前缀。如果您没有更改目录而是将目录传递给find本身,那么输出看起来会有很大不同:

    $ find .
    foo
    bar
    $ find /home
    /home/foo
    /home/bar
    

    在这种情况下,我们需要前者,以便tar命令正确执行。