【发布时间】:2014-02-14 08:27:00
【问题描述】:
我已经完全编写了这个脚本,我希望得到一些更正,或者对我知道可能的更简单的版本有所了解......
我想遍历一个命名的目录并检查每个子目录是否包含任何 X 分钟前的子目录,如果是,则删除旧的子目录。每个符合条件的子目录将仅包含 1 个符号链接。
对于这个结构 /var/www/flash/avmin/{$usr_id}/{$timestamp}/{->symlink}
我想保留 /{$usr_id} 但如果 +12 小时前删除所有 /{$timestamp},我认为这意味着我需要在删除它之前清空它。
因为 /{$usr_id} 很可能会在创建 $timestamp 和符号链接时在同一个服务器实例中创建,所以我必须循环遍历每个 /{$usr_id} 子目录并从那里测试条件。
我会让这个脚本每 12 小时运行一次,Cron 以 root 身份运行,因此在 24 小时内所有符号链接都将被确保是干净的。
请注意,../{$usr_id} 中可能有多个 {$timestamp} 子目录,但每个子目录将仅包含 1 个符号链接,没有其他内容。
我感觉这可能是一两行没有 for...in 的代码,只需使用 find inside avmin using (-maxdepth 2) 和 X 小时(或 X 分钟)的时间条件,对吗???
#!/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
【问题讨论】:
-
你好。请编辑您的问题以首先明确说明您想要做什么:进入哪个目录,然后删除哪些符号链接? (那些超过 x 天?小时?秒?)。在你的脚本中,我现在觉得很奇怪: [ "$xdir" type d -cmin +60 ] 这没有任何意义,而且一旦它应该是,你就会“find”。而不是“find $xdir”,我也觉得这很奇怪......
-
一点也不奇怪-只是脚本不好:)这就是我问的原因
-
欢迎使用脚本 :) 我建议您从 linuxcommand.org 的全部内容开始(了解 linux 世界中的命令,然后了解 shell 脚本的基础知识)。然后,当您有问题时,请首先参考以下内容:mywiki.wooledge.org/BashFAQ 和 mywiki.wooledge.org/BashPitfalls。剩下的脚本/编程问题将很高兴在StackOverflow.com 中提出(但有关 unix/linux 命令的更多命令请参见:unix.stackexchange.com 或 serverfault.com(+security.stackexchange.com 上的专家安全 Q)
标签: linux bash shell scripting cron