LINUX.ORG.RU
ФорумAdmin

поиск файлов по текущей дете

 , ,


0

4

Доброго времени суток. Мне нужно создать исполняемый файл,который при запуске будет выводить список всех файлов, с датой создания, равной текущему числу. Как можно отделить чисто число, и выделить текущую дату? для выполнения, мне можно использовать только grep/egrep, awk, ls



Последнее исправление: folayt (всего исправлений: 1)

Мне одному кажется, что тема для Job?

WereFox ★☆
()

Хорошо, создавай.

anonymous
()

Как можно отделить чисто число, и выделить текущую дату?

ls -l даст список файлов в датами, awk-ом парсим его, выковыриваем дату и сравниваем с текущей (в awk есть strftime и т.п.)

no-such-file ★★★★★
()
man find


мне можно использовать только grep/egrep, awk, ls

Это неэффективно.

ArcFi
()

выводить список всех файлов, с датой создания, равной текущему числу
мне можно использовать только grep/egrep, awk, ls

Дурь. Если вас уже приучили разбирать вывод ls(1) — отучайтесь.

Если мы о текущем каталоге рекурсивно, то:

$ find -newermt 00:00
Zmicier ★★★★★
()

мне можно использовать только grep/egrep, awk, ls

Лабораторные работы - за отдельную плату в Job. Ну или ищи доброго самаритянина, который поможет за «спасибо»

От себя могу порекомендовать man grep, man sed, man awk, man ls, ну и конечно info bash, раздел loops.

А вообще плюсую вышеотписавшихся насчет ненужности выдумывания велосипедов при наличии find

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)

man find

cat > today.sh
#!/bin/bash

TODAY=`awk -e 'BEGIN {$t = strftime("%b %d", systime()); print $t}'`
ls -l | while read line; do
	F_TIME=`echo $line | awk '{print $6,$7}'`
	if [[ $F_TIME == $TODAY ]]; then
		echo $line
	fi
done
^D
chmod +x today.sh
Difrex ★★★★
()
Ответ на: комментарий от Zmicier

Черт!

#!/usr/bin/awk -f

BEGIN {
    today = strftime("%b %d", systime());
    while ( "ls -l" | getline line ) {
        split(line, lsl);
        f_time = lsl[6] " " lsl[7];
        if ( today == f_time ) {
            result = lsl[0];
            for ( i = 1; i <= 9; i++ ) {
                result = result " " lsl[i];
            }
            print result;
        }
    }
}
Difrex ★★★★
()

Достаточно просто find:

find / -type f -newermt 2016-11-29 ! -newermt 2016-11-30
На выхлопе будут все файлы с временной отметкой соответствующей дате 2016-11-29.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Кстати да, очень правильное замечание — легко же могут быть файлы из будущего!

Только зачем все-таки дату явно прописывать?

$ find -newermt '00:00 today' -and -not -newermt '00:00 tomorrow'
Zmicier ★★★★★
()
Ответ на: комментарий от Difrex

Ну это очень длинно!

ls --time-style=long-iso -l | awk 'BEGIN{T=strftime("%Y-%m-%d",systime());}$6==T{print}'
vel ★★★★★
()
Ответ на: комментарий от anc

Ну это да.

Хотя на практике, если только мы не имеем дело с файлами с подложной датой, это не важно. Кому важна одна наносекунда.

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Зависит от задачи. Как ДБ-ик могу вам сказать эти секунды очень важны.

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