Видео ролики бесплатно онлайн

Смотреть подборки видео

Официальный сайт hauteecole 24/7/365

Смотреть видео бесплатно

lwilis 18.09.2009 03:40

Я идиот!Хочу замену /bin/cp!

Я щитаю, что очень хорошо, когда машина делает то, что сказали; но при этом способна проверить банальности и "банально гибка". Этой самой "банальной гибкости" не хватает. Да, она - раб, и будет делать то, что сказано. Но от нее нужно больше, она должна выбирать когда петь, а когда говорить. И поэтому я люто хочу, чтоб либо /bin/cp научился говорить: "Хозяин, места нету расчисть, - я допишу", либо хочу замену. ДаЭ!!!1111


Тэги: coreutils shell ненависть
+ 0 -
Похожие Поделиться

mirivlad 18.09.2009 08:22 #
+ -1 -
и правда)
lwilis 18.09.2009 08:59 #
+ 0 -
И да, меня отпустило и возникла мысль о реализации сабжевой фичи.

Во-первых, cp не виноват, да. Он должен копировать, вот и пусть.
Во-вторых демон нужен. Он будет висеть и посматривать: "А не запущен ли cp?", и если запущен, то будет смотреть в /proc/$pid_of_cp/cmdline, оттуда парсить путь назначения, делать df путь_назначения, и, если вдруг ОЙ. - стопарим cp, вываливаем нотификатор "Ололо места нету!" и продолжает чекать наличие фри спейса, как только достаточно (проверяет исходный размер и уже скопированный) - снимает cp с паузы.
Или это до сих пор продолжается, омг... )

Внимание вопрос: Как один процесс может поставить на паузу другой процесс?
muhas 18.09.2009 09:14 #
+ 3 -
Как один процесс может поставить на паузу другой процесс?
зачем???

всё делается элегантно. Пишется sh функция cp вызывающая /bin/cp только тогда когда есть место на разделе для копируемого файла/файлов и ругающегося на недостаточное место когда его не хватает не вызываю уже /bin/cp

если не лень пиши, задача не трудная. только вот хитрозадость одна (остальное я знаю как реализовать) - как вычеслить на какое блочное устройство будет производиться запись что бы высчитать место именно на нем?
lwilis 18.09.2009 09:20 #
+ 0 -
Нефти тебе. тыщщу

А с местом, можно схитрить. Сделать врапер над cp, который будет смотреть путь назначения перед запуском процесса копирования. Ну таким образом мы все узнаем.
muhas 18.09.2009 11:03 #
+ 0 -
Ну правильно. сначала смотрим куда копируем. высчитываем там место и т.д.
Только вот как узнать на какое устройство копируем что бы считать место я хз :(
lwilis 18.09.2009 15:59 #
+ 0 -
Видимо мы не допонимаем друг друга. Мой вариант.
Вот, скажем, хотим копировать нечто в /tmp/.
Делаем df /tmp/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 42931632 12882596 27868216 32% /

после смотрим размер исходных данных.

а этого достаточно, чтоб подытожить хватит нам места или нет.
KblCb 18.09.2009 11:14 #
+ 0 -
Наверное как-то так: берём абсолютный путь до места куда копируем, затем получаем список блочных устройств на которые можно писать (банально можно распарсить df), затем начинаем сравнивать абсолютный путь до места копирования с точками монтирования блочных устройств. Итого: мы пишем на то устройство где совпадение максимально. У меня есть два сомнения: не знаю как развернуть абсолютный путь с учётом симлинков и не знаю что будет если у тебя имеется стековая файловая система.
muhas 18.09.2009 11:51 #
+ 0 -
df -h папка | tail -n 1 | awk '{print $4}'
спасибо жуйке
lwilis 18.09.2009 16:00 #
+ 0 -
да, это я и имел в виду, только сначала сам написал, а потом твой коммент увидел
lwilis 18.09.2009 16:02 #
+ 0 -
да и кст, в жуйке уже посоветовали бросить велосипедо-строение, - есть же rsync и curl. ага.

можно расслабиться и почитать маны :)
muhas 18.09.2009 16:30 #
+ 0 -
не разу не велосипед...
не катит ни курл не rsync несколько не то делают, хотя и близко
lwilis 18.09.2009 16:02 #
+ 0 -
а вот симлинки, могут подпортить мед. Но для начала можно и без поддержки симлинков реализовать.

а что есть стековая фс? вкратце, как влияет на сабж
KblCb 18.09.2009 21:22 #
+ 1 -
Это aufs, mhddfs и иже с ними. Позволяют смонтировать несколько блочных устройств в единое нечто и как-то с ним работать.
xT 18.09.2009 16:23 #
+ 0 -
а как быть с софтом использующим cp ? =) пересобирать с вызовом этой функции?
или сабж только для ручного копирования?
muhas 18.09.2009 16:28 #
+ 0 -
mv /bin/cp /bin/cpp
а на место /bin/cp положить скриптик. не?
xT 18.09.2009 16:39 #
+ 0 -
можно, но что-то мне говорит, что не всё гладко будет
muhas 18.09.2009 17:19 #
+ 0 -
интересно что будет не гладко?
KblCb 18.09.2009 21:23 #
+ 0 -
добавляешь в скрипт волшебный ключ который позволяет следить за заполненностью дисков и всё.
razum2um 18.09.2009 21:01 #
+ 0 -
По вашему алгоритму проверка ведь будет однократной, да?
Ну и что получится, если запустите первый, а затем сразу второй cp, каждый по гигу скажем, на свободное место гига в полтора?
muhas 20.09.2009 14:48 #
+ 0 -
кончится если место то что-то не запишется =) собственно для постоянной проверки проще cp патчить чем простыми скриптами
razum2um 20.09.2009 15:46 #
+ 0 -
Собстно постоянная проверка все тормознет ;)
Не Ъ это все. cp должно просто копировать, а не печься о free space
lwilis 18.09.2009 09:14 #
+ 0 -
из жуйка подсказывает @rakoth: что-то типа kill -STOP ${pidof cp}
razum2um 18.09.2009 21:02 #
+ 1 -
А чисто из интереса: как его резюмить?
lwilis 20.09.2009 23:52 #
+ 0 -
хороший вопрос.
kstep 20.10.2009 14:07 #
+ 1 -
kill -CONT ${pidof cp}
yuretsz 18.09.2009 12:01 #
+ 0 -
И прогрессбарчики красивые чтоб рисовались, да.
muhas 18.09.2009 12:17 #
+ 0 -
вроде где-то был патч для cp для сих целей, на в апстрим не вошло. погугли по этому поводу
lwilis 18.09.2009 16:06 #
+ 0 -
use pv )
xT 18.09.2009 16:07 #
+ 0 -
использовать pv
yuretsz 18.09.2009 16:29 #
+ 0 -
Ну pv и что? Знаешь патч cp, который использует pv?
xT 18.09.2009 16:30 #
+ 0 -
по предложенному muhas`ом варианту
yuretsz 18.09.2009 16:33 #
+ 0 -
Какбе самому чтоле написать? Я простую копирялку писал на основе cp, но весь фунционал cp я ниосилил написать.
xT 18.09.2009 16:46 #
+ 0 -
нечто вроде такого внесте в .bashrc или другой .шеллrc
cppv() { cp $@ | pv ; }
yuretsz 18.09.2009 18:27 #
+ 0 -
Этот вариант не работает.
xT 18.09.2009 19:48 #
+ 0 -
Сорри. Не проверил сам =)

исправленный вариант =) увиденный минус - теряются права, но можно извратиться
cppv() {
if < -d $2 >; then
pv $1 > $2/$1
else
pv $1 > $2
fi }

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн