我编写了一个脚本来迭代Solaris中的目录。该脚本会查找超过30分钟且回显的文件。但是,无论文件的大小,我的if条件总是返回true。有人请帮忙解决这个问题。
for f in `ls -1`;
# Take action on each file. $f store current file name
do
if [ -f "$f" ]; then
#Checks if the file is a file not a directory
if test 'find "$f" -mmin +30'
# Check if the file is older than 30 minutes after modifications
then
echo $f is older than 30 mins
fi
fi
done
答案 0 :(得分:4)
ls
find
您可以用
替换整个脚本find . -maxdepth 1 -type f -mmin +30 | while IFS= read -r file; do
[ -e "${file}" ] && echo "${file} is older than 30 mins"
done
或者,如果Solaris上的默认shell支持进程替换
while IFS= read -r file; do
[ -e "${file}" ] && echo "${file} is older than 30 mins"
done < <(find . -maxdepth 1 -type f -mmin +30)
如果您的系统上有GNU find
,则可以在一行中完成所有操作:
find . -maxdepth 1 -type f -mmin +30 -printf "%s is older than 30 mins\n"
答案 1 :(得分:1)
由于您正在遍历目录,因此您可以尝试使用以下命令,该命令将查找在过去30分钟内编辑的所有以日志类型结尾的文件。使用:
-mmin +30
会在30分钟前编辑所有文件
-mmin -30
会提供过去30分钟内发生变化的所有文件
find ./ -type f -name "*.log" -mmin -30 -exec ls -l {} \;
答案 2 :(得分:0)
另一种选择是使用stat来检查时间。像下面的东西应该工作。
for f in *
# Take action on each file. $f store current file name
do
if [ -f "$f" ]; then
#Checks if the file is a file not a directory
fileTime=$(stat --printf "%Y" "$f")
curTime=$(date +%s)
if (( ( ($curTime - $fileTime) / 60 ) < 30 ))
echo "$f is less than 30 mins old"
then
echo "$f is older than 30 mins"
fi
fi
done