我在/opt/backup
中有一个文件夹,每天都会创建文件夹。为了节省空间,我想gunzip所有超过2天的文件夹。
我不想创建一个单独的zip文件,而是自己压缩每个文件夹,并保留名称。我试过了:
#!/bin/bash
# Backup files
files=($(find /opt/backup/ -mtime +"2"))
for files in ${files[*]}
do
echo $files
tar cvfz backup.tar.gz $files
done
但所有这一切都是创建一个zip文件,我想分别为每个文件夹。
该脚本将在凌晨02:00每2天运行一次。请问我该怎么写这个脚本?
答案 0 :(得分:1)
你太复杂了。你应该find足够老的目录,并简单地用tar压缩它们。
find /opt/backup/ -mtime +"2" -type d -exec tar cvfz backup.tar.gz {} \;
这将查找所有目录(-type d
)并对它们执行某个命令(tar cvfz backup.tar.gz {}
)。其中{}
是找到目录的占位符。
如果您想保留dir的名称,只需再次使用{}
:
find /opt/backup/ -mtime +"2" -type d -exec tar cvfz {}.tar.gz {} \;
请注意,{}
周围不需要引号,因为find
exec
内的特殊字符处理得很好。