2013-02-03 27 views
1

我试图从以EXPORT_v1x0开头并且日期小于2013-01-25(2013年1月25日)的Unix目录中删除文件。我可以逐个删除文件,但是我需要几天才能删除所有文件。有没有更好的方法来删除特定模式的文件?删除日期少于特定日期的具有相似模式的所有文件

下面是样本文件,当我做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。所以不确定任何高端命令和脚本。

回答

1

第一个幼稚的方法来解决这个问题,按照你的需求调整它:

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

为了防止find从做递归搜索,只是保持目前的文件夹中:

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

月2日更新:

name参数添加到包含字符串唯一列表文件“EXPORT_v1x0 “

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

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

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

感谢Fredrik的建议。如果我需要在删除文件之前进行一些干运行,那么我应该删除xargs rm吗? – ferhan

+0

正好。和'find'命令是非常灵活的,并且使用不同的参数,你可以缩小列出的文件以恰好匹配你在 –

+0

之后的文件。如果我正在尝试这个命令'find。 | awk -F'_''{if($ 3 <20121025)print}''那么它将打印来自其他目录的所有文件,而不是从当前目录中打印出来。我将从当前目录中删除所有文件。任何想法我需要做出什么改变? – ferhan

0

警告:要非常小心

你列出你想这样的文件:

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

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

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

感谢斯沃恩的意见。当我尝试你的第一个建议来打印这些文件时,我得到了这个异常'bash-3.00 $ ls -1 | awk -F _'$ 3 <“20130125”{print}' awk:第1行附近的语法错误 awk:在第1行附近救助 '。为什么?由于不同的Unix风格,我正在运行? – ferhan

+0

http://mywiki.wooledge.org/ParsingLs :-) –

+0

@TechGeeky:我不确定。这是非常基本的awk。确保单引号和双引号是正确的。 –

相关问题