![删除最旧的文件,直到目录大小为 8 GB](https://linux22.com/image/1412900/%E5%88%A0%E9%99%A4%E6%9C%80%E6%97%A7%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E7%9B%B4%E5%88%B0%E7%9B%AE%E5%BD%95%E5%A4%A7%E5%B0%8F%E4%B8%BA%208%20GB.png)
我有一个主文件夹 /srv/ftp,其中包含许多子文件夹(数百个)和文件(超过 80 000 个文件)。此目录有 10 GB。
我需要为此编写一个脚本:我需要从所有子目录中删除最旧的文件(最早创建的文件),直到主 /srv/ftp 目录大小为 8GB。
我怎样才能做到这一点?
答案1
尝试这个脚本(将其放在头文件夹中)。
#!/bin/bash
echo New dimension?
read dimension
initialDimension=$(du -sk | cut -f1 -d ' ') #Find initial dimension
while [ "$(du -sk | cut -f1 -d ' ')" -gt $dimension ] #While the dimension of this
#Directory is greater then $dimension (inputted before)
do
echo Finding file
#This let you find the oldest file name:
uselessChars=$(find -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d ' ' -f 1)
oldestFile=$(find -type f -printf '%T+ %p\n' | sort |head -n 1)
oldestFile=${oldestFile#$uselessChars}; #Remove useless chars
oldestFile=${oldestFile# } #Remove useless space
echo " Found: $(find -type f -printf '%T+ %p\n' | sort | head -n 1)" #Print complete path
$(rm "$oldestFile") #Remove the file
echo Removed $oldestFile #Print the result
done
#The result:
echo Done
echo Initial Dimension: $initialDimension
echo Final Dimension: $(du -sk | cut -f1 -d ' ')
我认为使用 python 可以更轻松地完成这项任务,但我想尝试使用 bash 编写。许多事情可以做得更好,但它确实有效。