我想寻求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不打印任何东西
如果你想要进一步的建议,你需要提供更多关于你的意图是什么脚本的信息-目前,这不是很清楚(至少对我来说)。