我有400个具有以下模式的文件夹的列表:
backup_01_01_2013/ backup_01_02_2013/ backup_01_03_2013/ ... backup_08_25_2014/
每天通过cron作业创建一个新文件夹。
我要删除所有文件夹,但:
如何在Linux中使用Bash删除所有不必要的文件夹?
因此,假设它们都在同一目录中。
我要指出的是,我测试了该脚本的一部分,但不是全部,所以您可能要在实际运行它之前进行一些修改/测试,以免最终删除所有目录。
# Find the date 30 days ago.
recent_dirs=`date -d "-30 days" +%d-%m-%Y`
rec_month=`echo "${recent_dirs}" | cut -d '-' -f2`
rec_day=`echo "${recent_dirs}" | cut -d '-' -f1`
rec_month=`echo "${recent_dirs}" | cut -d '-' -f3`
# Go to your "home" directory for the directories.
cd /path/to/home/directory
for i in *; do
# Check to see if the element is a directory.
if [ -d "${i}" ]; then
echo "Processing directory - ${i} ... "
# Determine the date information for the directory.
cur_month=`cat "${i}" | cut -d '_' -f1`
cur_day=`cat "${i}" | cut -d '_' -f2`
# Keep all directories from the first of the month.
if [ "${first_day}" -eq "01" ]; then continue; fi
# Keep all directories from the current month and current year.
if [ "${cur_month}" -eq "${rec_month}" ]; then
if [ "${cur_year}" -eq "${rec_year}" ]; then continue; fi
fi
# Keep all directories from last month, but newer than today's DAY. I'm not
# a pro at bash arithmetic, so you might have to goof with the subshell
# math to get it to work quite right.
if [ "${cur_month} -eq $(( expr $rec_month - 1 )) ]; then
if [ "${cur_day}" -gt "${rec_day}" ]; then continue; fi
fi
# So at this point, I think we've dealt with everything, except the case where
# the current month is January, and so you're trying to save December's
# directories from last year. I think this handles it.
if [ "${rec_month}" -eq "01" ]; then
if [ "${cur_month} -eq "12" ]; then
if [ "${cur_year}" -eq $(( expr ${rec_year} - 1 )) ]; then continue; fi
fi
fi
# If we haven't stopped processing the directory by now, it's time
# remove our directory.
rm -fr "${i}"
else
echo "Skipping non-directory "${i}"...
do
1号出口
这样做不会处理31天的几个月,因此在很多情况下您可能会保存31个目录,而不是30个目录。我的印象是,您正在尝试进行清理,而不是严格遵守常规,但是...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句