LINUX.ORG.RU

Bash


0

1

нужно баш скриптом найти файлы, которые созданы в определенном промежутке времени, например, в первой половине суток. вроде бы обычным find просто, но, а что делать если все файлы созданы в разные дни?

man date, man stat

вкратце - date +%H -d «`stat -c %y $filename`» даст тебе час, в котором бым создан файл

ananas ★★★★★
()

Баш — это принципиальное условие?

import sys, os
import os.path
import time

for dirname, files, dirs in os.walk(sys.argv[1]):
    for fname in files:
        path = os.path.join(dirname, fname)
        hour = time.localtime(os.path.getctime(path)).tm_hour
        if 0 <= hour < 12:
            print path
anonymous
()
Ответ на: комментарий от anonymous

вот и я такого же мнения. Если б я выбирал язык, я бы не спрашивал, как это делать)

Drdiesel
() автор топика
Ответ на: комментарий от arsi

Очередное клингонское изречение от arsi.

find + awk, кто короче и понятнее сделает?

find . -type f -printf '%p %Ck\n' | awk '{if ( $2 < 12 ) print $1}'

anonymous
()
Ответ на: комментарий от arsi

> перепиши, чтобы с пробелами в именах файлов корректно работало

Ага и с переводами строк. Мой питоновский скрипт чуть выше.

anonymous
()
Ответ на: комментарий от arsi
find . -type f -printf '%p %Ck\0' | awk '{if ( $NF < 12 ) {NF-=1; print}}' RS='\0'

Хотя пришлось использовать маленький трюк с NF, но это всяко получше регулярки.

anonymous
()
Ответ на: А что, прикольно от andrey_pp

А что, прикольно

Странные у тебя coreutils. Свежий ls просто эскейпит перевод строки как и find.

anonymous
()
Ответ на: комментарий от OxiD

Разделителя полей? Какой профит это даст? И что брать как разделитель строк?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.