【问题标题】:delete all the files having similar pattern whose date is less than particular date删除所有具有相似模式且日期小于特定日期的文件
【发布时间】:2026-01-15 04:50:01
【问题描述】:

我正在尝试从 Unix 目录中删除以 EXPORT_v1x0 开头且日期小于 2013-01-25(2013 年 1 月 25 日)的文件。我可以一个一个地删除文件,但我需要几天时间才能删除所有文件。有没有更好的方法来删除具有特定模式的文件?

以下是我执行 ls 时的示例文件

bash-3.00$ ls /data/bds/real
EXPORT_v1x0_20120811.dat.gz 
EXPORT_v1x0_20120811.dat.gz   

如果您看到上述文件。每个文件都有一个日期。假设我们考虑这个文件-

EXPORT_v1x0_20120811.dat.gz

它的日期是20120811 所以我需要删除所有以EXPORT_v1x0 开头并且日期小于20130125 的文件。所以如果我应该删除所有日期小于20130125的文件,那么我上面提到的所有文件都将被删除,因为日期小于20130125

注意:- 所有文件都具有与我上面提到的完全相同的模式。只有日期和后面的其他数字不同。

所以我只需要删除所有以EXPORT_v1x0 开头并且日期小于20130125 的文件。

我正在运行SunOS。我仍在更好地学习 Unix。所以不确定是否有任何高端命令和脚本。

【问题讨论】:

    标签: linux unix sunos


    【解决方案1】:

    解决问题的第一种天真的方法,根据您的需要调整它:

    find . | awk -F'_' '$3<20130125' | xargs rm
    

    为了防止find 进行递归搜索并留在当前文件夹中:

    find . \( ! -name . -prune \) -type f | ...
    

    第二次更新:

    添加name 参数以仅列出包含字符串“EXPORT_v1x0”的文件

    find . \( ! -name . -prune \) -type f -name "EXPORT_v1x0*" | ...
    

    使find 非递归的更简单方法是使用maxdepth 标志

    find . -maxdepth 1 -type f -name "EXPORT_v1x0*" | ...
    

    【讨论】:

    • 感谢 Fredrik 的建议。如果我需要在删除文件之前进行一些试运行,那么我应该删除 xargs rm 对吗?
    • 完全正确。 find 命令非常通用,使用不同的参数,您可以缩小列出的文件范围以完全匹配您所追求的文件
    • 如果我正在尝试此命令find . | awk -F'_' '{if($3 &lt; 20121025)print}',那么它会打印来自其他目录的所有文件,而不是来自我所在的当前目录。我将从当前目录中删除所有文件。有什么想法我需要对此做出哪些改变?
    • 还有一件事,在同一个目录中还有其他文件也有日期。我需要删除所有以EXPORT_v1x0 this 开头并且日期模式少于我在问题中提到的文件。我也将编辑我的问题。
    • 谢谢。然后我需要对第一个用于删除目的的脚本进行任何更改如果我需要删除当前目录中所有以EXPORT_v1x0 开头且日期小于20130125 的文件的文件。?
    【解决方案2】:

    警告:要非常小心

    你可以这样列出你想要的文件:

    ls -1 | awk -F _ '$3<"20130125"'
    

    如果提供了正确的文件列表,您可以这样做

    ls -1 | awk -F _ '$3<"20130125"' | xargs rm
    

    【讨论】:

    • 感谢沃恩的建议。当我尝试您的第一个打印文件的建议时,我得到了这个异常bash-3.00$ ls -1 | awk -F _ '$3&lt;"20130125" {print}' awk: syntax error near line 1 awk: bailing out near line 1 。为什么?因为我正在运行不同的 Unix 风格?
    • @TechGeeky:我不确定。这是非常基本的awk。确保单引号和双引号正确。
    • @TechGeeky:实际上,{print} 是不必要的。我已经删除了它。虽然它不应该造成问题。
    • @Fredrik:同意这通常不是一个好方法,但对于这种非常特殊的情况,它似乎是一种快速简便的方法。