2013-08-28 3 views
0

В bash есть ли командная строка для перечисления всех файлов в каталоге на основе метки времени. например,список файлов в каталоге на основе timestamp

\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 не доступен для поиска. Я использую. Он жалуется, что «find: invalid predicate» -newermt'' – iamauser

+0

вы можете добавить вывод 'find -version' к вашему вопросу или пастебин? – hek2mgl

3

Вы можете использовать найти команду, если вы знаете, количество дней

find ./ -mtime -60 

+60 означает, что вы ищете файл, измененный 60 дней назад.

60 означает менее 60 дней.

60 Если вы пропустите + или - это означает ровно 60 дней.

1

Прикоснитесь к файлу с меткой времени и найдите все старые файлы.

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

Я люблю чистый Баш решение (ну, не считая date и 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 

Результатов не будет сортироваться, потому что вы не упомянули, что вы хотите их отсортирован заказ.

1

Прежде всего, выясните, как старый файл должен иметь временную метку раньше (например,) 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 старый.

Смежные вопросы