我在/ home / path中有多个目录,我想让脚本为每个文件夹制作.tar
并保存到另一个位置。
find /home/ -type d -maxdepth 1 -mindepth 1 -exec tar cvf {}.tar {} \;
但我的问题是在.tar
中创建/home
文件,之后我必须将它们移到另一个需要很长时间的位置。
我想要的是,tar
文件应该在不在/home/
目录中的其他位置创建。
感谢: 阿卡什
答案 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
中相应命名的文件。
当前目录很重要,因为find
的输出将第一个参数作为其输出的前缀。如果您没有更改目录而是将目录传递给find
本身,那么输出看起来会有很大不同:
$ find . foo bar $ find /home /home/foo /home/bar
在这种情况下,我们需要前者,以便tar
命令正确执行。