我已经完全破解了这个脚本,我希望得到一些更正,或者对一个更简单的版本的一些见解,我知道这是可能的......
我想遍历一个已命名的目录并检查每个子目录,如果它包含任何X分钟旧的子目录,如果是,则删除旧的子目录。每个符合条件的子目录只包含1个符号链接。
对于此结构/ var / www / flash / avmin / {$ usr_id} / {$ timestamp} / { - > symlink}
我想保留/ {$ usr_id}但是如果+12小时删除所有/ {$ timestamp},我认为这意味着我需要在删除它之前将其清空。
因为在创建$ timestamp和符号链接时,可能会在同一服务器实例中创建/ {$ usr_id},所以我必须遍历每个/ {$ usr_id}子目录并从那里测试条件。
我将使这个脚本每12小时运行一次,Cron以root身份运行,因此在一个24小时内,所有符号链接都将保证干净。
注意../{$usr_id}中可能有几个{$ timestamp}子目录,但每个子目录只包含1个符号链接而不包含任何其他内容。
我觉得这可能是一行或两行代码而没有for ... in并且只是在avmin中使用find(-maxdepth 2)和X小时(或X分钟)的时间条件正确??? / p>
#!/bin/bash
for i in /var/www/flash/avmin/*
do
cd "$i"
for xdir in "$i"
do
if [ "$xdir" type d -cmin +60 ]; then
find . -maxdepth 2 -type L -cmin +60 -exec rm {} \
"$xdir" -type d -cmin +60 -exec rm {}
fi
done
done
exit
我看到一个“类似的问题”给了我一个想法here
答案 0 :(得分:1)
我一点也不确定我正在回答正确的问题(请编辑你的问题以清楚说明你需要做什么,因为现在示例脚本没什么意义......]
到目前为止我猜到了:
1)你想看看/ var / www / flash / avmin / * /下面的每个目录1级,只看那些超过60分钟的目录
2)那么你想在这些目录中删除超过60分钟的所有链接吗?
通过这些猜测:
#!/bin/bash
export NBMIN=60
#find all subdirs jsut underneath each /var/www/flash/avmin/*/ that are $NBMIN minutes old
for xdir in $(find /var/www/flash/avmin -type d -mindepth 2 -maxdepth 2 -cmin +${NBMIN} )
do
#for those dirs, delete symlinks "just underneath", that are older than $NBMIN minutes
find "$xdir" -mindepth 1 -maxdepth 1 -type L -cmin +${NBMIN} -exec echo rm '{}' \;
#and then if there is nothing else in that dir, delete it:
command rmdir "$xdir" #without -f and -r... will only remove "$i" directory if it's empty!
done
当然,这只适用于每个目录和文件只是“普通”名称(即,不包含空格,以及其他奇怪的字符,如“换行符”或其他)... Stephane可能会弹出Zsh“** /”细节的答案;)
我不确定这是你想要的(并且请测试它...并且只有当你100%确定它只列出了它时才删除“echo”(所以“echo rm”变成“rm”)你想看的文件消失了!(例如,我不确定你只想查看超过60mn的目录?)