linux - 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
解决方案
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
无论如何都会输出文件名。
推荐阅读
- r - Rcpp:将本机 C++ 函数作为参数传递?
- c# - SignalR Clients.Client($id) 无效
- docker - 如何确定从最新/稳定标签构建的 Docker 映像的特定版本?
- r - dplyr 重命名“找不到对象”
- uwp - 在 UWP AppServiceConnection 中检索字节数组
- ruby-on-rails - 验证前的 ActiveModel 属性类型转换?
- c++ - 将类对象实例作为参数从 main() 传递给另一个类对象实例
- javascript - React-table 单个单元格样式
- android - 安装后无法启动每日通知
- c++ - 碰撞检测后更改背景颜色?