2013-08-28 79 views
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之前有時間戳的文件。

UPDATE:

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

回答

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 COMAND支持-newerXY你可以有這樣的:

find /dir -type f -not -newermt 'Aug 28 13:00' 
3

通過ls -la顯示的時間爲最後修改日期。要列出目錄中的所有文件已2013/08/28 13:00:00前被最後修改,請使用以下命令find

find -maxdepth 0 -type f -newermt '2013-08-28 13:00:00' 
+0

不知何故-newermt不適用於我正在使用的查找版本。它抱怨,「發現:無效謂詞」-newermt'' – iamauser

+0

你可以添加'find -version'到你的問題或pastebin的輸出嗎? – hek2mgl

3

您可以使用find命令,如果你知道的天數

find ./ -mtime -60 

+60意味着您正在查找60天前修改的文件。

60意味着不到60天。

60如果您跳過+或 - 意味着恰好60天。

1

觸摸帶時間戳的文件並查找所有較舊的文件。

touch -d 'Aug 28 13:00' /tmp/timestamp 
find . ! -newer /tmp/timestamp 
1

我愛純bash的解決方案(當然,不考慮datestat):

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 

結果是不會進行排序,因爲你沒有提到你希望他們在整理訂購。

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"