我正在尝试从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。所以不确定任何高端命令和脚本。
答案 0 :(得分: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*" | ...
答案 1 :(得分:0)
警告:要非常小心
列出您想要的文件:
ls -1 | awk -F _ '$3<"20130125"'
如果它给出了正确的文件列表,你可以
ls -1 | awk -F _ '$3<"20130125"' | xargs rm