我有2个变量,其中包含这样的日期:2001.10.10
我想使用带过滤器的ls,只列出上次修改过的文件是在第一个和第二个日期之间
答案 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日)。