如何按时间和大小删除子文件夹中的所有文件



我想寻求Linux方面的帮助。我有一个主文件夹,里面有三个子文件夹,里面有文件。

我需要删除子文件夹中满足条件的所有文件…

子文件夹大小小于5kb且该子文件夹中的文件存在时间大于5分钟。

我这样做了,但我发现完全错了。

find ./main/* -type 'f' -mmin +5 -size -5k -delete

结构:结构

文件夹:Main ->子文件夹:第一(2个文件),第二(2个文件),第三(2个文件)见图

我想为子文件夹"second"破例。我的意思是这些规则不适用于第二阶段。子文件夹.

所以我这样做了

find ./main/* -type 'd' -size -5k -not -path "./main/second"

但是我不知道如何实现我对文件(超过5分钟)使用条件的部分,然后这些文件将被删除。

谢谢你的帮助。

我试过这个代码。但总是else

#! /usr/bin/bash
d="./main/*"
f="./main/*"
z=0
if [ "$d" == TRUE ] && ["$f" == TRUE ]
then
$z="find $d -type 'd' -size -5k $f -type 'f' -mmin +5 -delete"
echo "$z"
else
echo "nothing"
fi

总是else…:/

总结:我需要创建一个bash脚本,检查主文件夹中的所有子文件夹。如果它发现子文件夹的大小小于5kb。脚本检查子文件夹中的文件,看这些文件是否超过5分钟,是否满足所有条件。这将删除该子文件夹中的所有文件。

我需要删除子文件夹中满足条件的所有文件…

子文件夹大小小于5kb且该子文件夹中的文件存在时间大于5分钟。

find -size不会在文件夹上工作(至少不是以您期望的方式)。您必须使用du之类的东西。

这是一个脚本,应该做你想要达到的:

#!/usr/bin/env bash
# The main directory
maindir="./main"
# Get list of subdirs in maindir
readarray -t subdirs < <(find "${maindir}" -mindepth 1 -maxdepth 1 -type d -not -path "${maindir}/second" | sort)
# Process list of subdirs
for subdir in "${subdirs[@]}"; do
# Determine size of subdir
size=$(du -bs "${subdir}" | awk '{ print $1 }')
# Skip subdirs that exceed 5k
if (( ${size} > 5 * 1024 )); then
echo "Skipping subdir '${subdir}' (size: ${size} bytes)"
continue
fi
# Find and delete files in subdir older than 5 min
echo "Deleting files in subdir '${subdir}'..."
find "${subdir}" -type f -mmin +5 -delete
done

OP提供更多细节之前的先前回答-保留此内容以供将来参考:


关于find命令:

我需要删除子文件夹中满足条件的所有文件…

子文件夹大小小于5kb且该子文件夹中的文件存在时间大于5分钟。

这将是:

find ./main -type f -size -5k -mmin +5 -not -path "./main/second/*" -delete

解释:

  • 您想要删除文件,因此您需要使用-type f
  • 查找文件
  • -path需要通配符才能正常工作

关于脚本代码:

  • [ "$d" == TRUE ]执行字符串比较。您设置了d="./main/*",因此您测试[ "./main/*" == "TRUE" ],这永远不会为真,因为它们是不同的字符串($f相同)
  • 如果你想实际运行查找命令,你需要这样做:$z=$("find $d -type 'd' -size -5k $f -type 'f' -mmin +5 -delete"),但是$z在此之后将为空,因为当使用-delete时,find不打印任何东西

如果你想要进一步的建议,你需要提供更多关于你的意图是什么脚本的信息-目前,这不是很清楚(至少对我来说)。