Linux:列出文件名,如果在日期间隔之间最后修改

时间:2013-12-12 17:48:50

标签: linux list date ls

我有2个变量,其中包含这样的日期:2001.10.10

我想使用带过滤器的ls,只列出上次修改过的文件是在第一个和第二个日期之间

2 个答案:

答案 0 :(得分:2)

我能想到的最佳解决方案是使用边界时间戳创建临时文件,然后使用find

touch -t YYYYMMDD0000 oldest_file
touch -t YYYYMMDD0000 newest_file
find -maxdepth 1 -newer oldest_file -and -not -newer newest_file
rm oldest_file newest_file

如果要从所有文件名中删除前导-print0,可以使用find ./选项。

如果不能创建临时文件,您可以考虑编写一个脚本来计算和打印文件的年龄such as described here,然后将其用作谓词。

答案 1 :(得分:0)

对不起,这不是最简单的。我刚刚开发它,仅适合你。 : - )

ls -l --full-time|awk '{s=$6;gsub(/[-\.]/,"",s);if ((s>="'"$from_variable"'") && (s<="'"$to_variable"'")) {print $0}}';

问题是,这些简单的命令行工具不处理日期类型。所以首先我们将它们转换为整数,删除分隔符“ - ”和“。”。字符(由你是它“。”,由我“ - ”所以我删除了两个,这可以在

中看到
gsub(/[-\.]/,"",s)

删除后,我们已经可以将它们与整数进行比较。在这个例子中,我们将它们与整数$ from_variable和$ to_variable进行比较。因此,这将列出在$ from_variable和$ to_variable之间修改的文件。

“from_variable”和“to_variable”都需要是20070707格式的环境变量(2007年7月7日)。