gpt4 book ai didi

linux - 递归删除文件和文件夹

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:25 26 4
gpt4 key购买 nike

我有很多文件和文件夹。他们有这样的语法路径

/opt/logs/qnap/[hosta,hostb]/2012/03/12

Qnap 数据存储上的所有日志文件,它位于另一个位置。因此,当我想删除超过 180 天的文件和文件夹时,我无法使用 find 命令导致运行缓慢。所以我写了一个这样的脚本。

SixMonthAgo=$(date --date='190 day ago' "+%Y/%m/%d/%H")  = 2011/06/12/12
Hosts="hosta hostb"
maxDay=181
qnapFolder="/opt/logs/qnap"

for host in $(echo "${Hosts}"); do
maxDayAgo=$(date --date="${maxDay} day ago" "+%Y/%m/%d")
countCharacters=$(echo ${maxDayAgo} | wc -c)
if [ ${countCharacters} -ge 10 ]; then
rm -rf ${qnapFolder}/${host}/${maxDayAgo} #output of this just like 2012/03/12
fi
done

但有时我会出错。这个解决方案不能正常工作,我想要什么。我想在 180 天之前删除所有文件和文件夹。我怎样才能做到这一点 ?例如,必须删除 2012/03/23 之前的所有文件和目录。

提前致谢

最佳答案

查找命令很慢?你确定吗?唯一的缺点是它无法删除目录结构。

找到/opt/logs/qnap -type f -mtime +180 -delete

如果目录确实是同时创建的,那么删除 -type f 可能对您有用。

找到/opt/logs/qnap -mtime +180 -delete

请注意,查找速度非常快......但是如果你真的想用 shell 脚本来完成......

CUTOFF=$(date --date='190 day ago' "+%s)
HOSTS="hosta hostb"
DIRECTORY="/opt/logs/qnap"

for HOST in $(ls -1 $DIRECTORY); do
if [ -d $DIRECTORY$HOST ]; then
for DATE in $(ls -1 $DIRECTORY$HOST); do
if [ -d $DIRECTORY$HOST$DATE ]; then
if [ "$CUTOFF" < "$(stat --format="%Y" $DIRECTORY$HOST$DATE)" ]; then
echo "Deleting $DIRECTORY$HOST$DATE"
rm -rf $DIRECTORY$HOST$DATE;
fi
fi
done
fi

关于linux - 递归删除文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com