1

我正在尝试从 Unix 目录中删除文件,该目录以EXPORT_v1x02013-01-25(2013 年 1 月 25 日)开头且日期小于 2013-01-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。所以不确定任何高端命令和脚本。

4

2 回答 2

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*" | ...
于 2013-02-03T19:52:27.073 回答
0

警告:要非常小心

您可以像这样列出所需的文件:

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

如果这给出了正确的文件列表,你可以这样做

ls -1 | awk -F _ '$3<"20130125"' | xargs rm
于 2013-02-03T19:52:07.780 回答