выборка файлов по дате создания

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
dump
проходил мимо

выборка файлов по дате создания

Непрочитанное сообщение dump » 2011-02-02 17:06:41

Имеется директория в которой ~14000 файлов , с добавлением каждый день . Появилось желание написать скрипт , который делал бы следующее --
искал файлы в этой директории по месяцу( по какой то дате ) создания и перемещал их созданную папку с именем месяца . Вроде всё просто !
а чем найти ?
find с таким количеством файлов отказывается работать , чем можно выбрать ?
ОС Freebsd

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-02 17:13:41

В смысле find отказывается?
Чем аргументирует? :smile:
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.


kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-02 17:32:49

А если вывод в файл перенаправить?
И звезда вроде не обязательна.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

dump
проходил мимо

Re: выборка файлов по дате создания

Непрочитанное сообщение dump » 2011-02-02 17:40:59

а что даст вывод в файл ?
нужно найти файлы определённого месяца после черо их переместить в другую папку . ман find тоже не сказал как выбрать по дате , с именами можно .
обычный листинг ls -l /data |grep Nov . насколько я понимаю грепом просто делаю выборку а как нужное направить куда надо

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-02 17:51:00

А если так:

Код: Выделить всё

find /data/ -ctime +200 -exec echo {} >> testfile \;
Имя каждого файла, попадающего под условие записывается в файл testfile - это для теста
ну а для переноса:

Код: Выделить всё

find /data/ -ctime +200 -exec mv {} каталог_назначения \;
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: выборка файлов по дате создания

Непрочитанное сообщение dmtr » 2011-02-02 17:53:39

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

Код: Выделить всё

find /* -ctime +200 -ls
попер выводить файло, не ругается.
This game has no name. It will never be the same.


kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-02 18:09:57

Код: Выделить всё

find /data/ -type f -ctime +200 -exec cp {} "каталог_назначения" \;
В кавычки двойные каталог_назначения и -type f не помешает.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.


Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: выборка файлов по дате создания

Непрочитанное сообщение dmtr » 2011-02-02 18:27:50

што-то мне не нравится
то
find: Argument list too long
то
/sbin/find: Argument list too long.
покажите

Код: Выделить всё

# uname -r
# which find
This game has no name. It will never be the same.

dump
проходил мимо

Re: выборка файлов по дате создания

Непрочитанное сообщение dump » 2011-02-02 18:37:04

это копи паст find: Argument list too long полный с /sbin/find: Argument list too long
which find
/usr/bin/find
7.2-RELEASE-p8

боевая машина . в других директориях где нормальное количество файлов всё работает с разными ключами .
была история тоже с find: Argument list too long при удалении find . -ctime +30 -exec rm решалась с помощью find . -ctime +30 |xargs rm . но в данном случае и xargs не помогает .

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: выборка файлов по дате создания

Непрочитанное сообщение dmtr » 2011-02-02 18:51:33

я возможно не туда копаю, но
если

Код: Выделить всё

which find
/usr/bin/find
откуда
полный с /sbin/find: Argument list too long
почему /sbin/find?
This game has no name. It will never be the same.

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: выборка файлов по дате создания

Непрочитанное сообщение rmn » 2011-02-02 20:16:13

Код: Выделить всё

remcomp% ls -l -D "%F" /usr/local/etc | head
total 574
drwxr-xr-x  3 root   wheel     512 2011-01-31 CORBA
drwxr-xr-x  5 root   wheel     512 2011-01-31 ConsoleKit
-r--r--r--  1 root   wheel     588 2010-06-07 GeoIP.conf.default
drwxr-xr-x  2 root   wheel     512 2011-01-31 PolicyKit
drwxr-xr-x  5 root   wheel     512 2011-01-31 X11
drwxr-xr-x  5 root   wheel     512 2011-02-01 apache22
-r--r--r--  1 root   wheel     164 2010-06-07 aspell.ver
drwxr-xr-x  3 root   wheel     512 2011-01-31 avahi
drwxr-xr-x  2 root   wheel     512 2011-01-31 bash_completion.d

remcomp% cat sort_by_date.sh 
#!/bin/sh

src_dir=$1
dst_dir=$2

ls -l -D "%F" ${src_dir} | grep -v ^total | awk '{print $6,$7}' |
(
        while read d n
        do
                mkdir -p ${dst_dir}/${d}
                cp -R ${src_dir}/${n} ${dst_dir}/${d}/
        done
)

remcomp% sudo ./sort_by_date.sh /usr/local/etc /tmp/sorted

remcomp% ll /tmp/sorted/
total 14
drwxr-xr-x   3 root  wheel   512  2 фев 19:14 2009-09-11
drwxr-xr-x   2 root  wheel   512  2 фев 19:14 2009-12-28
drwxr-xr-x   2 root  wheel   512  2 фев 19:14 2010-06-07
drwxr-xr-x   2 root  wheel   512  2 фев 19:14 2010-06-30
drwxr-xr-x   4 root  wheel   512  2 фев 19:14 2011-01-30
drwxr-xr-x  27 root  wheel  1024  2 фев 19:14 2011-01-31
drwxr-xr-x   7 root  wheel   512  2 фев 19:14 2011-02-01

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: выборка файлов по дате создания

Непрочитанное сообщение rmn » 2011-02-02 20:33:46

по поводу * в ком. строке:

если указываем:

Код: Выделить всё

%command "/usr/ports/*"
то программа command получит первым параметром /usr/ports/*

если указываем:

Код: Выделить всё

%command /usr/ports/*
то шелл перед вызовом command заменит параметр на список файлов. т.е. command будет вызвана так:

Код: Выделить всё

%command /usr/ports/CHANGES /usr/ports/GIDs /usr/ports/INDEX-6 ...
отсюда и Argument list too long, т.к. find, в твоем случае, получит ~14000 параметров.

dump
проходил мимо

Re: выборка файлов по дате создания

Непрочитанное сообщение dump » 2011-02-04 14:15:00

Огромное Спасибо за помощь , скрипт не много модифицировал работает как надо

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-04 14:24:07

Так а в чем причина была?
С find так и не удалось ?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-04 15:21:30

rmn писал(а):

Код: Выделить всё

remcomp% ls -l -D "%F" /usr/local/etc | head
Что за опция у ls -D "%F" перерыл ман - ничего не нашел во FreeBSD ?
Под линукс - есть такая опция.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: выборка файлов по дате создания

Непрочитанное сообщение rmn » 2011-02-04 15:35:38

Код: Выделить всё

     -D format
             When printing in the long (-l) format, use format to format the
             date and time output.  The argument format is a string used by
             strftime(3).  Depending on the choice of format string, this may
             result in a different number of columns in the output.  This
             option overrides the -T option.

Код: Выделить всё

remcomp% uname -a
FreeBSD remcomp 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jan 31 12:43:32 EET 2011     root@:/usr/obj/usr/src/sys/REMCOMP  i386

dump
проходил мимо

Re: выборка файлов по дате создания

Непрочитанное сообщение dump » 2011-02-04 15:38:45

find не работает ( как писалось выше ) если число файлов ( аргументов ) превышает 3094

ls | wc -l
3100
find * -mtime +10 -print
/sbin/find: Argument list too long.
Не работате , Предел

ls | wc -l
3093
find * -mtime +10 -print
1289227257.M89348P79332V00000058I004730AC_102
1289227257.M897212P79332V00000058I004730E3_157
1289227257.M936218P79332V00000058I004730E4_158
1289227257.M948282P79332V00000058I004730E5_159
1289227257.M968154P79332V00000058I004730E6_160
1289227258.M47627P79332V00000058I004730E7_161
1289227258.M95261P79332V00000058I004730E8_162
1289227277.M849968P79333V00000058I00472AB8_0
Всё Ок

Потом стал выбирать ls ом , но не знал как перенаправить дальше . Ещё раз СПС за скрипт .
P.S Предел для find 3093 .

На FreeBsd
ls -l ${src_dir} | grep ${Month} | awk '{print($6,$9)}' |
(
while read d n
do
mv ${src_dir}/${n} ${dst_dir}/
done

)

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-04 15:47:40

2 rmn
Ясно:
# uname -a

Код: Выделить всё

FreeBSD 7.3-RELEASE-p4
Такой опции нет, а ведь полезная :pardon:

2 dump
Есть ограничение, но оно должне решаться через xargs.
Вот только нужно подумать что меньше\оптимальнее будет - интересно, потестирую.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: выборка файлов по дате создания

Непрочитанное сообщение rmn » 2011-02-04 16:28:50

kpp писал(а):2 rmn
Ясно:
# uname -a

Код: Выделить всё

FreeBSD 7.3-RELEASE-p4
Такой опции нет, а ведь полезная :pardon:

Код: Выделить всё

remcomp% stat -t "%F" -f "%Sm %N" /usr/local/etc/* | head
2011-01-31 /usr/local/etc/CORBA
2011-01-31 /usr/local/etc/ConsoleKit
2010-06-07 /usr/local/etc/GeoIP.conf.default
2011-01-31 /usr/local/etc/PolicyKit
2011-01-31 /usr/local/etc/X11
2011-02-01 /usr/local/etc/apache22
2010-06-07 /usr/local/etc/aspell.ver
2011-01-31 /usr/local/etc/avahi
2011-01-31 /usr/local/etc/bash_completion.d
2011-01-31 /usr/local/etc/dbus-1
как вариант

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: выборка файлов по дате создания

Непрочитанное сообщение kpp » 2011-02-06 1:25:21

Из выражения:

Код: Выделить всё

find /data/* -ctime +200 -ls
нужно обязательно убрать *

Если файлов очень много (ошибка Argument list too long) , делать через xargs

Код: Выделить всё

find /data/ -ctime +200 -print0 | xargs -0 -I '{}' cp {} "каталог_назначения"
Долго не мог найти как "получить" каждый файл, для передачи его в команды, например cp или mv
Подсказку с примером нашел здесь:
http://www.mkssoftware.com/docs/man1/xargs.1.asp
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

dump
проходил мимо

Re: выборка файлов по дате создания

Непрочитанное сообщение dump » 2011-02-07 10:42:16

очень полезная ссылка СПС , тоже долго искал что то вразумительное про xargs