如果分区上的空闲空间小于5%,我正在寻找一个从目录中删除文件(最早的文件)的脚本。
我找到了以下脚本:
FILESYSTEM=/dev/sda1 # or whatever filesystem to monitor
CAPACITY=95 # delete if FS is over 95% of usage
CACHEDIR=/home/user/lotsa_cache_files/
# Proceed if filesystem capacity is over than the value of CAPACITY (using df POSIX syntax)
# using [ instead of [[ for better error handling.
if [ $(df -P $FILESYSTEM | awk '{ gsub("%",""); capacity = $5 }; END { print capacity }') -gt $CAPACITY ]
then
# lets do some secure removal (if $CACHEDIR is empty or is not a directory find will exit
# with error which is quite safe for missruns.):
find "$CACHEDIR" --maxdepth 1 --type f -exec rm -f {} \;
# remove "maxdepth and type" if you want to do a recursive removal of files and dirs
find "$CACHEDIR" -exec rm -f {} \;
fi
根据我的理解,如果$ FILESYSTEM上使用的空间超过$ CAPACITY%,则会从CACHEDIR中删除文件。
但是,我不确定这是否有效,但我确信不会删除最早的。
我希望删除最小数量的文件(从最旧到最新)以释放空间。
答案 0 :(得分:2)
如果/ dev / sda1超过95%已满,您的脚本将删除$CACHEDIR
中的每个文件。
做这样的事情:
#!/bin/bash
DIRECTORY="/path/to/your/directory"
CAPACITY=95
while [[ $(df $DIRECTORY | awk 'NR==2 && gsub("%","") {print$5}') -ge $CAPACITY ]];do
rm -rf $(find $DIRECTORY -mindepth 1 -printf '%T+ %p\n' | sort | awk 'NR==1 {print$2}')
done
您可以在crontab上运行此脚本,或者执行while循环并使用systemd对其进行守护,以便它在后台继续运行并在每次分区达到95%时删除文件。
解释
df $DIRECTORY
跟踪目录分区并打印其信息
awk 'NR==2 && gsub("%","") {print$5}'
打印第二行(相关的一行,首先是标题),删除百分号并打印第5列(“使用%”列)。
rm -rf
删除以下命令的结果
find $DIRECTORY -mindepth 1 -printf '%T+ %p\n' | sort | awk 'NR==1 {print$2}'
找到$DIRECTORY
并打印文件的修改日期,然后sort
,并打印第一行(最旧的一行)的第二个字段(文件名)。
答案 1 :(得分:0)
如何使用ls来删除文件?
FILESYSTEM=/dev/sda1 # or whatever filesystem to monitor
CAPACITY=95 # delete if FS is over 95% of usage
CACHEDIR=/home/user/lotsa_cache_files/
# Proceed if filesystem capacity is over than the value of CAPACITY (using df POSIX syntax)
# using [ instead of [[ for better error handling.
if [ $(df -P $FILESYSTEM | awk '{ gsub("%",""); capacity = $5 }; END { print capacity }') -gt $CAPACITY ]
then
# Remove the oldest file in CACHEDIR:
# rm $CACHEDIR/$( ls -t $CACHEDIR | tail -1 )
rm $CACHEDIR/$( ls -tp $CACHEDIR | sed '/\/$/d' | tail -1 )
fi