首页 > 解决方案 > bash 中的条件与 find 和 if else 匹配

问题描述

我想查看 15 天之前修改到目录中的文件。

如果15天前没有找到,那么10天前找。

我的尝试

#!/bin/bash
FILE_DIR1="/var/log/"
diskClean (){
FileExist=`sudo find $FILE_DIR1 -mtime +15 -type f -exec ls -la {} \;|awk '{print $9}'`

if [ -f $FileExist ]
then
   echo "these are the files before 15 days."
   ls $FileExist
else
   FILE=`sudo find $FILE_DIR1 -mtime +10 -type f -exec ls -la {} \;|awk '{print $9}'`
   echo "these are the files before 10 days." 
   ls $FILE     
fi
}
diskClean

标签: linuxbashshell

解决方案


FileList是一个字符串,其中包含所有文件的名称(由空格分隔),例如/var/log/foo /var/log/bar. 然后,您在您的条件下测试您是否有一个名称等于该字符串的值的文件。当你有一个名为“/var/log/foo”的文件时,你没有一个名为“/var/log/foo /var/log/bar”的文件,条件将失败。

你可以使用

if [[ -n "$FileList" ]]

反而。

顺便说一句,首先列出具有所有属性(ls -l)的文件,然后使用 awk 仅提取文件名有什么意义?如果您只对文件名感兴趣,您可以使用ls -1,甚至更好地-exec完全省略该子句;find无论如何都会输出文件名。


推荐阅读