上述代码可以优化一下吗
时间: 2024-03-18 22:42:02 浏览: 116
优化代码
可以优化一下,可以将重复的代码提取出来,写成一个函数,这样可以让代码更加简洁和易于维护。同时,为了避免在每次循环中都重复检查文件数量,可以在循环外先计算出每个文件夹中要保留的文件数量,然后在循环中进行判断和删除操作。以下是优化后的代码:
```
#!/bin/bash
QNX_LOG_DIR="/qnxlog"
TOP_DIR="$QNX_LOG_DIR/top"
HOGS_DIR="$QNX_LOG_DIR/hogs"
PIDIN_A_DIR="$QNX_LOG_DIR/pidin"
# 创建输出目录,如果不存在
mkdir -p $TOP_DIR
mkdir -p $HOGS_DIR
mkdir -p $PIDIN_A_DIR
# 每个文件夹要保留的文件数量
RETAIN_COUNT=2
# 删除文件名中时间较小的文件
function delete_old_files() {
local dir=$1
local count=$(ls -1 $dir | wc -l)
if [ $count -gt $RETAIN_COUNT ]
then
local files=$(ls -1 $dir | head -n $(($count - $RETAIN_COUNT)))
for file in $files
do
rm $dir/$file
done
fi
}
while true
do
# 执行 top 命令,写入文件
top -i 1 >> $TOP_DIR/top-$(date +%Y%m%d-%H%M%S).log
delete_old_files $TOP_DIR
# 执行 hogs 命令,写入文件
hogs -i 1 >> $HOGS_DIR/hogs-$(date +%Y%m%d-%H%M%S).log
delete_old_files $HOGS_DIR
# 执行 pidin 命令,写入文件
pidin a >> $PIDIN_A_DIR/pidin-$(date +%Y%m%d-%H%M%S).log
delete_old_files $PIDIN_A_DIR
sleep 10
done
```
在优化后的代码中,我们定义了一个 `delete_old_files()` 函数,它接收一个文件夹路径作为参数,检查该文件夹中的文件数量是否大于指定的保留数量,如果是,则删除文件名中时间较小的文件。在每次写完文件后,我们调用这个函数来删除旧文件。同时,我们在循环外定义了一个变量 `RETAIN_COUNT`,用于指定每个文件夹要保留的文件数量。这样可以避免在每次循环中都重复计算文件数量。
阅读全文