0

在 bash 中,是否有命令行根据时间戳列出目录中的所有文件。例如,

\ls -ltr dir/file*

-rw-r--r-- 1 anon  root   338 Aug 28 12:30 g1.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 12:32 g2.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 12:41 g3.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 13:03 g4.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 13:05 g5.log

我想列出之前有时间戳的所有文件Aug 28 13:00

更新 :

]$ find -version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX 
4

6 回答 6

5

如果知道天数,可以使用 find 命令

find ./ -mtime -60

+60 表示您正在查找 60 天前修改过的文件。

60 表示少于 60 天。

60 如果您跳过 + 或 - 则表示正好是 60 天。

于 2013-08-28T19:46:54.623 回答
3

所显示的时间ls -la为最后修改日期。要列出目录中上次修改过的所有文件2013/08/28 13:00:00,请使用以下find命令:

find -maxdepth 0 -type f -newermt '2013-08-28 13:00:00'
于 2013-08-28T19:45:57.827 回答
1

首先,找出文件的时间戳必须早于(例如)8 月 28 日 13:00 的时间。

now=$(date +%s)
then=$(date +%s --date "2013-08-28 13:00")
minimum_age_in_minutes=$(( (now-then)/60 ))

然后,用于find查找所有至少minimum_age_in_minutes旧的文件。

find "$dir" -mmin "+$minimum_age_in_minutes"
于 2013-08-28T20:33:14.410 回答
1

我喜欢纯 bash 解决方案(好吧,不考虑dateand stat):

dateStr='Aug 28 13:00'

timestamp=$(date -d "$dateStr" +%s)
for curFile in *; do
    curFileMtime=$(stat -c %Y "$curFile")
    if (( curFileMtime < timestamp )); then
        echo "$curFile"
    fi
done

结果不会被排序,因为您没有提到您希望它们按排序顺序。

于 2013-08-28T20:21:23.983 回答
1

试试这个命令:

read T < <(exec date -d 'Aug 28 13:00' '+%s') && find /dir -type f | while IFS= read -r FILE; do read S < <(exec stat -c '%Y' "$FILE") && [[ S -lt T ]] && echo "$FILE"; done

此外,如果您的find命令支持-newerXY,您可以这样做:

find /dir -type f -not -newermt 'Aug 28 13:00'
于 2013-08-28T19:37:00.313 回答
1

触摸带有时间戳的文件并查找所有较旧的文件。

touch -d 'Aug 28 13:00' /tmp/timestamp
find . ! -newer /tmp/timestamp
于 2013-08-28T19:51:58.257 回答