Страница 1 из 1
выборка файлов по дате создания
Добавлено: 2011-02-02 17:06:41
dump
Имеется директория в которой ~14000 файлов , с добавлением каждый день . Появилось желание написать скрипт , который делал бы следующее --
искал файлы в этой директории по месяцу( по какой то дате ) создания и перемещал их созданную папку с именем месяца . Вроде всё просто !
а чем найти ?
find с таким количеством файлов отказывается работать , чем можно выбрать ?
ОС Freebsd
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 17:13:41
kpp
В смысле find отказывается?
Чем аргументирует?

Re: выборка файлов по дате создания
Добавлено: 2011-02-02 17:24:06
dump
find /data/* -ctime +200 -ls
find: Argument list too long
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 17:32:49
kpp
А если вывод в файл перенаправить?
И звезда вроде не обязательна.
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 17:40:59
dump
а что даст вывод в файл ?
нужно найти файлы определённого месяца после черо их переместить в другую папку . ман find тоже не сказал как выбрать по дате , с именами можно .
обычный листинг ls -l /data |grep Nov . насколько я понимаю грепом просто делаю выборку а как нужное направить куда надо
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 17:51:00
kpp
А если так:
Код: Выделить всё
find /data/ -ctime +200 -exec echo {} >> testfile \;
Имя каждого файла, попадающего под условие записывается в файл testfile - это для теста
ну а для переноса:
Код: Выделить всё
find /data/ -ctime +200 -exec mv {} каталог_назначения \;
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 17:53:39
dmtr
find с таким количеством файлов отказывается работать
шо-то сдаетя мне дело не в количестве. у меня
попер выводить файло, не ругается.
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 18:00:16
dump
-ctime +200 -exec cp {} /data/ \;
/sbin/find: Argument list too long.
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 18:09:57
kpp
Код: Выделить всё
find /data/ -type f -ctime +200 -exec cp {} "каталог_назначения" \;
В кавычки двойные каталог_назначения и -type f не помешает.
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 18:22:11
dump
аналогично . ни чего не помогает
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 18:27:50
dmtr
што-то мне не нравится
то
find: Argument list too long
то
/sbin/find: Argument list too long.
покажите
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 18:37:04
dump
это копи паст 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 не помогает .
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 18:51:33
dmtr
я возможно не туда копаю, но
если
откуда
полный с /sbin/find: Argument list too long
почему
/sbin/find?
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 20:16:13
rmn
Код: Выделить всё
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
Re: выборка файлов по дате создания
Добавлено: 2011-02-02 20:33:46
rmn
по поводу * в ком. строке:
если указываем:
то программа
command получит первым параметром
/usr/ports/*
если указываем:
то шелл перед вызовом
command заменит параметр на список файлов. т.е.
command будет вызвана так:
Код: Выделить всё
%command /usr/ports/CHANGES /usr/ports/GIDs /usr/ports/INDEX-6 ...
отсюда и
Argument list too long, т.к.
find, в твоем случае, получит ~14000 параметров.
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 14:15:00
dump
Огромное Спасибо за помощь , скрипт не много модифицировал работает как надо
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 14:24:07
kpp
Так а в чем причина была?
С find так и не удалось ?
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 15:21:30
kpp
rmn писал(а):Код: Выделить всё
remcomp% ls -l -D "%F" /usr/local/etc | head
Что за опция у ls
-D "%F" перерыл ман - ничего не нашел во FreeBSD ?
Под линукс - есть такая опция.
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 15:35:38
rmn
Код: Выделить всё
-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
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 15:38:45
dump
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
)
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 15:47:40
kpp
2
rmn
Ясно:
# uname -a
Такой опции нет, а ведь полезная
2
dump
Есть ограничение, но оно должне решаться через xargs.
Вот только нужно подумать что меньше\оптимальнее будет - интересно, потестирую.
Re: выборка файлов по дате создания
Добавлено: 2011-02-04 16:28:50
rmn
kpp писал(а):2
rmn
Ясно:
# uname -a
Такой опции нет, а ведь полезная
Код: Выделить всё
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
как вариант
Re: выборка файлов по дате создания
Добавлено: 2011-02-06 1:25:21
kpp
Из выражения:
нужно
обязательно убрать
*
Если файлов очень много (ошибка
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
Re: выборка файлов по дате создания
Добавлено: 2011-02-07 10:42:16
dump
очень полезная ссылка СПС , тоже долго искал что то вразумительное про xargs