我正在尝试从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。因此,不确定是否有任何高端命令和脚本。
解决问题的第一个简单方法,根据您的需求进行推特:
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*" | ...
警告:非常小心
你这样列出你想要的文件:
ls -1 | awk -F _ '$3<"20130125"'
如果这给出了正确的文件列表,你可以进行
ls -1 | awk -F _ '$3<"20130125"' | xargs rm