- Найти все файлы в папке кроме последнего., Gromophon, 08:09 , 27-Дек-06 (1)
- Найти все файлы в папке кроме последнего., Kleo, 06:59 , 28-Дек-06 (2)
>может быть грубовато, но как-то так >find /dir/ -name '*.svl' > aa | expr 0 \- `cat aa | wc -l` \+ 1 > a1 | head `cat a1` `cat aa` | xargs gzip Сильно :)А может быть как то можно узнать, что файл занят другим процессом и по этому признаку его не трогать??
- Найти все файлы в папке кроме последнего., allez, 07:20 , 28-Дек-06 (3)
- Найти все файлы в папке кроме последнего., Kleo, 08:31 , 28-Дек-06 (4)
>В этом вам поможет lsof. man lsof No manual entry for lsof :(
- Найти все файлы в папке кроме последнего., allez, 09:36 , 28-Дек-06 (5)
- Найти все файлы в папке кроме последнего., Kleo, 11:32 , 28-Дек-06 (6)
>А сам-то lsof у вас есть? Попробуйте "lsof --help". Ну, а если >нужен мануал, то вот: >https://www.opennet.ru/man.shtml?topic=lsof > >Вообще же вам достаточно и такой конструкции: >lsof | grep <your_file> Если в списке открытых файлов, выдаваемом lsof, найдется указанный вами файл, значит, он >как раз занят каким-то процессом. :-) Небыло :) Сейчас поставил, работает. Осталось только привязать его оутпут к инпуту gzip'а :)
- Найти все файлы в папке кроме последнего., allez, 14:23 , 28-Дек-06 (7)
- Найти все файлы в папке кроме последнего., Kleo, 16:20 , 28-Дек-06 (8)
>Так за чем же дело стало? ;-)find /dir -name "*.svl" | grep >-v `lsof | grep "/dir" | awk '{print $9}' | uniq` >| xargs gzip Я хотел, правда, оставить это вам в качестве > >домашнего задания, но что-то не в меру добрый я сегодня. :-) > >P. S. Возможно, вам придется изменить номер поля, выводимого awk (возможно, но >не >обязательно). Тут уж смотрите сами. Готовые решения, это конечно хорошо, но я так и не смог "въехать" в эту семантику :)) Скрипт не запустился, ругается на параметры грепа. Если не сложно, можно по шагам объяснить процедуру действа? :)
- Найти все файлы в папке кроме последнего., allez, 19:15 , 28-Дек-06 (9)
- Найти все файлы в папке кроме последнего., Kleo, 01:10 , 29-Дек-06 (10)
>Та-ак, в том, что скрипт не запустился, моя вина: не совсем точно >команду составил. >По зрелом размышлении, она должна бы выглядеть так: find /dir -name "*.svl" >| grep -v `lsof | grep "/dir" | sed 's/ >*/ /g' | awk '{print $NF}' | uniq` | xargs gzip >А сейчас приступим к разбору. И начнем его с последовательности команд, >заключенных в >обратные кавычки:lsof | grep " /dir" | sed 's/ */ /g' >| awk '{print $NF}' | uniq Происходит тут следующее: > >1. Команда lsof формирует список открытых файлов. >2. Команда grep "/dir" отбирает из этого списка строки, содержащие "/dir". >3. Команда sed 's/ */ /g' заменяет в отобранных строках последовательности >из двух >и более пробелов на один. >4. Команда awk '{print $NF}' выводит на печать только последнее поле в >полученых >строках (в нем как раз и содержится имя файла). >5. Команда uniq удаляет повторяющиеся строки (это на случай, если файл открыт >более чем >одним процессом). > >Итак, мы получили имя открытого файла. Оно передается в качестве аргумента команде > >grep -v для того, чтобы исключить этот файл из вывода команды find >/dir -name "*.svl". >И, наконец, имена остальных файлов через xargs передаются на вход команды gzip. > > >Уф-ф, вроде бы все. Какое, однако, монументальное объяснение получилось. :-) > >P. S. Да, чуть не забыл: не могли бы вы сообщить, какой >ОС пользуетесь и какие именно >сообщения об ошибках вам были выданы (просто скопируйте их и покажите здесь)? ОС - FreeBSD 6.1 Сообщения: Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. Прямо так и выводится, /dir я естественно меняю на свою директорию. Выражаю искреннюю благодарность за подробное разжевывание материала :) Сегодня вечером буду пробовать. Удачи в Новом Году! :)
- Найти все файлы в папке кроме последнего., allez, 06:24 , 29-Дек-06 (11)
- Найти все файлы в папке кроме последнего., Kleo, 10:47 , 29-Дек-06 (12)
>Хм, я именно на FreeBSD 6.1 и обкатывал эту команду. >Погонял ее еще малость и остановился на такой конструкции: find /dir -name >"*.svl" | grep -v "`lsof | grep "/dir" | sed 's/ > */ /g' | awk '{print $NF}' | sort -u`" | >xargs gzip Проверил несколько раз - работает. Изменения: заключил в кавычки >выражение-аргумент для >команды grep -v и заменил uniq на sort -u. При попытке выполнить, пишет: NF: Undefined variable. :( Пробовал и с открытым файлом в дире и со всеми закрытыми. - Найти все файлы в папке кроме последнего., allez, 12:52 , 29-Дек-06 (13)
- Найти все файлы в папке кроме последнего., Kleo, 13:54 , 29-Дек-06 (14)
>Покажите, пожалуйста, ваш скрипт полностью. Будем посмотреть, где там собака порылась. Скрипт беру ваш, копипастом отсюда, единственное что меняю, так это /dir на свою директорию, все.
- Найти все файлы в папке кроме последнего., Medlar, 15:48 , 29-Дек-06 (15)
- Найти все файлы в папке кроме последнего., Kleo, 16:01 , 29-Дек-06 (16)
>А говорят, в рунете нет альтруистов :) Кто говорит? Враки :))Кстати, пока суть да дело, сделал так: Добавил к find /dir/ -name '*.' параметр -mmin +3. Т.е. берем только файлы у которых время последней модификации было более трех минут назад. Так как "открытый" файл пишется постоянно, то в принципе должно работать. Проверить смогу чуть позже. Полностью скрипт теперь выглядит так: find /dir -name "*.svl" -mmin +3 | xargs gzip
- Найти все файлы в папке кроме последнего., YuryD, 16:01 , 29-Дек-06 (17)
- Найти все файлы в папке кроме последнего., allez, 20:14 , 30-Дек-06 (18)
- Найти все файлы в папке кроме последнего., Kleo, 04:46 , 10-Янв-07 (19)
>Кстати, Kleo, весьма разумное решение. Что-то я, увлекшись вашей задачей, за деревьями > >леса не увидел. :-) Действительно, почему бы не заставить newsyslog трудиться над >вашей >проблемой? Он как раз для того и предназначен. И тот огород, что >мы с вами нагородили, >не понадобится (а заодно и те велосипеды, которые тут наизобретались ;-)). Насколько я понял из man newsyslog, эта тулза может следить/архивировать только какой то конкретный, именованный файл (auth.log, messages, etc...), исходя из его макс. размера или даты последней модификации. В моем же случае, о файлах известно лишь их расширение, да и размер весьма варьируется. Плюс ко всему имя должно оставаться не изменным, единственно меняется расширение на gz (архив тоесть). По моему это немного не то. Хотя возможно неправильно истолковал документацию :)
|