gpt4 book ai didi

linux - 测试匹配模式的文件数,如果有超过 1 个,可以删除最旧的文件

转载 作者:行者123 更新时间:2023-12-04 19:28:43 24 4
gpt4 key购买 nike

我有一个包含以下文件的目录:

test_fed_1.rds
test_fed_2.rds
test_nonfed_1.rds
test_nonfed_2.rds
它们将按上次修改时间降序排列。
我需要测试是否有多个文件与“test_fed_”匹配,以便在存在多个与给定模式匹配的文件时删除较旧的文件。
我目前有以下内容,它为我提供了与目录中的模式匹配的文件数:
echo ${#$(find . -maxdepth 1 -name "*test_fed_*")}
这给出了输出 2 .
我无法将对此的测试合并到 shell if-else 语句中,该语句查看是否有多个文件匹配该模式,然后,如果有,则删除较旧的文件,以便只有一个文件(最近修改)匹配剩余的模式。
我正在寻找类似的东西:
if [[${#$(find . -maxdepth 1 -name "*test_fed_*")} > 1]]
then ls -t inv_fed_* | tail -n 1 | xargs -d '\n' rm # <- removes last file
fi
谢谢!

最佳答案

既然你标记了这个 zsh ,那个 shell 的glob qualifiers使这非常简单。
首先,将您感兴趣的文件存储在一个数组中,按正确的顺序排序,然后您可以轻松检查数组的长度并执行诸如删除最后一个元素或除第一个元素之外的所有操作数组 parameter expansion :

#!/usr/bin/env zsh

setopt extended_glob

files=( test_fed_*.rds(#qom) ) # Sort by modification time; most recent first

if [[ ${#files} -gt 1 ]]; then # More than one file
rm "${files[-1]}" # Delete the oldest one - the last one in the array
# rm "${files[@]:1}" # Or delete all but the newest/first file.
fi

关于linux - 测试匹配模式的文件数,如果有超过 1 个,可以删除最旧的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68762347/

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