Jas*_*per 3 shell cron find busybox files
好的,我在这里请求了一个代码,但最初我没有要求使其与 busybox 兼容。我的错。我是 Linux 和编码的新手。
该代码需要执行以下操作:
当硬盘容量达到 95% 时,从目录中删除 50GB 最旧的数据(带有文件的目录)。
他们给我的代码是,这不适用于busybox:
DIRS="a/ b/"
MAXDELBYTES="53687091200" # 50GB
DELBYTES="0"
find $DIRS -type f -printf "%T@ %s %p\n" | sort -r -n | while read time bytes filename
do
rm -fv "$filename"
DELBYTES=$((DELBYTES + bytes))
if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi
done
Run Code Online (Sandbox Code Playgroud)
什么不起作用:
现在需要将其转换为busybox,以便它可以在我的嵌入式Linux系统上运行。还需要添加一个 cron 命令,以便它每周五运行。
由于find的busybox实现不提供自定义输出格式,您需要将格式任务外包给一个单独的程序 :) 幸运的是,甚至包括方便的命令。它的输出格式字段与GNU find使用的不同,因此您需要使用的符号不同。下面的脚本假设和是来自.busyboxstatfindstatbusybox
DIRS="a/ b/"
MAXDELBYTES="53687091200" # 50GB
DELBYTES="0"
find $DIRS -type f -exec stat -c "%Y %s %n" {} \; | sort -r -n | while read time bytes filename
do
rm -fv "$filename"
DELBYTES=$((DELBYTES + bytes))
if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi
done
Run Code Online (Sandbox Code Playgroud)
与往常一样,请在使用前阅读每个命令的说明。在 的情况下busybox,您将找不到它们的联机帮助页,但您可以使用它--help来显示使用信息。
请注意,当文件名中包含换行符时,此解决方案可能会在不太可能的情况下破坏事情!这不应该发生在健康的系统上,但可能会发生,例如,如果有人设法闯入系统或利用某些允许创建任意文件的漏洞。
为了防止在这种情况下意外删除有用的文件,您应该首先找到并删除名称中包含换行符的所有文件。要列出这些,请运行:
find / -name "*
*"
Run Code Online (Sandbox Code Playgroud)
(星号之间只有一个换行符。)然后,当您确定不需要所有这些文件时,请使用以下任一命令删除它们
find / -name "*
*" -delete
Run Code Online (Sandbox Code Playgroud)
或者
find / -name "*
*" -print0 | xargs -0 rm -vf
Run Code Online (Sandbox Code Playgroud)
两者都应该与busybox.