以下语法将删除文件夹下的文件hive
:
/usr/bin/find /var/log/hive -type f -print -delete
我正在尝试执行以下操作:
/var/log/hive
仅当文件夹大小大于时才删除最旧的文件10G
注意 - 当 hive 文件夹下的大小正好是 10G 时,删除过程将停止,因此如果大小大于 10G,清除过程将开始
我们可以使用 find 命令或其他方法创建这个解决方案吗?
答案1
在 GNU 系统上,您可以执行以下操作:
cd /var/log/hive &&
find . -type f -printf '%T@ %b :%p\0' |
sort -zrn |
gawk -v RS='\0' -v ORS='\0' '
BEGIN {max = 10 * 1024 * 1024 * 1024} # 10GiB; use max=10e9 for 10GB
{du += 512 * $2}
du > max {
sub("[^:]*:", ""); print
}' | xargs -r0 echo rm -f
即按上次修改时间(从最新到最旧)对常规文件进行排序,然后计算其累积磁盘使用量(这里假设没有硬链接),并在超过 10GiB 阈值时删除每个文件。
请注意,它没有考虑目录文件本身的大小。它只考虑常规文件的磁盘使用情况。
echo
对结果满意后移除。
一行:
find . -type f -printf '%T@ %b :%p\0' |sort -zrn|gawk -vRS='\0' -vORS='\0' '{du+=512*$2};du>10*(2^30){sub("[^:]*:","");print}'|xargs -r0 echo rm -f
要在所有常规文件的累积磁盘使用量超过 10GiB 时仅删除 *.wsp 文件,您需要首先列出非 wsp 文件。同时,我们还可以考虑之前丢失的目录和其他非常规文件的磁盘使用情况:
cd /var/log/hive &&
find . \( -type f -name '*.wsp' -printf WSP -o -printf OTHER \) \
-printf ' %T@ %b :%p\0' |
sort -zk 1,1 -k2,2rn |
gawk -v RS='\0' -v ORS='\0' '
BEGIN {max = 10 * 1024 * 1024 * 1024} # 10 GiB
{du += 512 * $3}
du > max && $1 == "WSP" {
sub("[^:]*:", ""); print
}' | xargs -r0 echo rm -f
答案2
尝试这个,
选项1:删除超过 90 天且超过 10G 的文件夹
find /var/log/hive -size +10G -mtime +90 -type f -print -delete
选项2:删除最旧的文件夹
find /var/log/hive -size +10G -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d" " -f2 | xargs rm
答案3
怎么样
while test "$(du -s /var/log/hive | cut -f1)" -gt 10000000 ; do rm -i /var/log/hive/"$(ls -t /var/log/hive | tail -1)" ; done
?