LINUX.ORG.RU

Поправте bash


0

1

Нужно найти все файлы созданые с 18 до 23

#!/bin/bash

for y in 2012 2013
do
	for i in 01 02 03 04 05 06 07 08 09 10 11 12
	do
		for j in  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
	    do
		echo "$i"
		echo "$y"
		echo "$j"
			touch /tmp/voice/ -t $y$i$j1800 start
			touch /tmp/voice/ -t $y$i$j2355 stop
			find /tmp/voice/ -newer start \! -newer stop >> rez
		done	
	done
done
exit 0





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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

seq -f «%02g» 1 31

no-such-file ★★★★★
()

Ну а вообще лучше тут использовать perl

no-such-file ★★★★★
()
Ответ на: комментарий от Spirit_of_Stallman

А что atime? Там можно только относительно текущего момента искать, а не конкретно с 18 до 23 часов каждого дня каждого месяца. Разве нет?

no-such-file ★★★★★
()

man find

кстати

$ echo {1..31}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
drBatty ★★
()
Ответ на: комментарий от no-such-file

Справедливое замечание.
Можно извернуться от текущего момента, но это будет настолько же не элегантно.

Spirit_of_Stallman ★★★
()

А типа

$find /tmp/voice -type f -exec ls -l '{}' \; | ...
, где вместо многоточия парсится дата и выдаётся на выход только нужные?

ziemin ★★
()

ПоправтеПоправьте bash

Поправил.

Dendy ★★★★★
()

Perl FTW!

perl -MFile::Find -E'find sub {my $chour = (localtime((stat $_)[10]))[2]; say $File::Find::name if $chour >= 18 and $chour <= 23}, @ARGV' <directory>

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

Имя файла может содержать 18: и т.п., например data-18:43.png. Так что это костыль.

Впрочем, если вместо ls использовать stat -c %z, то будет работает.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Имя файла может содержать 18: и т.п., например data-18:43.png

Например имя файла может содержать время создания? :) Так это же и требуется в данном случае!

ziemin ★★
()

Нужно найти все файлы созданые с 18 до 23

строго говоря, такой даты не хранится в атрибутах, поэтому лабу можно не сдавать.

alex_custov ★★★★★
()

touch /tmp/voice/ -t $y$i$j1800 start

А временные метки /tmp/voice вы зачем изменяете?

Какая часть скрипта не работает? Файлы start и stop создаются?

Требуемый вами файл руками находится? Посмотрите вывод команды ″stat″ от искомого файла и от ваших start/stop файлов.

mky ★★★★★
()
Ответ на: комментарий от mky
touch: invalid date format `201312'
touch: invalid date format `201312'
find: `start': No such file or directory

echo «$y$i$j»

20131231

Походу он не успивает зацепить дни ?!?!?

CyberDx
() автор топика
Последнее исправление: CyberDx (всего исправлений: 2)
Ответ на: комментарий от CyberDx

Он воспринимает ″$y$i$j1800″ как три переменных ″$y″, ″$i″ и ″$j1800″. Используйте двойные кавычки или фигурные скобки.

mky ★★★★★
()

Когда-то, решил это дело вот так...

touch -d 2011-06-01 00:00:01 /tmp/first.date && touch -d 2011-07-01 12:15:01 /tmp/second.date && find . -type f \( -newer /tmp/first.date -a -not -newer /tmp/second.date \)

А ещё, со свежими версиями find, можно попробовать вот так...

find . -type f -newerct 2013-03-01 ! -newerct 2013-03-11
kp
()
	for i in 01 02 03 04 05 06 07 08 09 10 11 12
	do
		for j in  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Жесть! Юзайте Python там генераторы есть.

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

Хотя, про второй вариант, это я чуток поторопился, прошу прощения. Впрочем, можно как-то так провернуть...

find . -type f -newerct '27 hours ago' ! -newerct '25 hours ago'

... для разового нахождения нужного и если известно, сколько часов прошло.

kp
()
Ответ на: комментарий от ziemin

Например имя файла может содержать время создания

Не угадал. В имени файла может быть произвольное время, или вообще не время а нечто похожее.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Не угадал. В имени файла может быть произвольное время, или вообще не время а нечто похожее.

Ух ты! Как ты красиво аргументировал. Но, в любом случае, нас рассудит CyberDx. ИМХО не думаю, что в специально выделенном каталоге будет храниться всякий хлам.

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