LINUX.ORG.RU

Ответ на: комментарий от snoopcat

Нет, в том то и вся проблема Допустим

for i in «$(find)»; do something; done

Это будет одна большая строка-помойка

for i in $(find); do something; done

Вот тут будет неправильно восприниматься. Приходится городить велосипеды на ruby, что делать?

babusha
() автор топика
Ответ на: комментарий от arsi

Фак! Какое убожище получилось:

for i in $(find | xargs --delimiter='\n' | grep [Aa]); do rm «$i»; done Как это выглядело на руби

`find`.split(/\n/).each{|file| File.delete file if file =~ /[Aa]/}

Почему весь bash состоит из костылей на 98.73% ?

babusha
() автор топика

find /path -exec rm '{}' \;

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

>Почему весь bash состоит из костылей на 98.73% ?

потому что такие ламеры как ты не могут осилить man find:

find ./ -type f -name «*[Aa]*» -delete

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

for i in $(find); do something; done

export IFS=$'\n'

for i in $(find); do something; done

Правда, имена файлов с \n будут обработаны криво, поэтому все равно надо использовать find|xargs или аналоги.

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

> поэтому все равно надо использовать find|xargs

Никогда не понимал, зачем городить xargs к find, если последний и так может вызывать команды и передавать им в качестве аргумента найденные файлы?

Это такое заболевание - пайп головного мозга? Когда люди начинают писать такое: cat file | other-cmd

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

>Никогда не понимал, зачем городить xargs к find

Это классика. Из всяких древних UNIX FAQ.

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

>Когда люди начинают писать такое: cat file | other-cmd

Ага. А также «echo ... | ...» вместо "... <<< ...".

Мы, старперы, консервативны.

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

> Никогда не понимал, зачем городить xargs к find, если последний и так может вызывать команды и передавать им в качестве аргумента найденные файлы?

А ты подумай. Допустим, у тебя миллион файлов. Сколько будет fork/exec'ов с использованием xargs и без него?

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

> > Никогда не понимал, зачем городить xargs к find, если последний и так может вызывать команды и передавать им в качестве аргумента найденные файлы?

А ты подумай. Допустим, у тебя миллион файлов. Сколько будет fork/exec'ов с использованием xargs и без него?

С find будет как минимум на 1 меньше. Если использовать \+ - то ещё меньше.

anonymous
()
Ответ на: комментарий от babusha

Почему весь bash состоит из костылей на 98.73% ?

Потому что выкидыш из тёмных 80-х. И ruby тоже имеет немало перловых корней из тех времён.

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

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

По теме: find не нужен, ибо есть рекурсивный глоббинг

zolden ★★★★★
()
#!/bin/bash                                                                                                  
IFS=$'\n'                                                                                                    
for N in $(find . -name '*.flac')                                                                            
do                                                                                                           
...
done

Вот так пашет.

post-factum ★★★★★
()
Ответ на: комментарий от Eshkin_kot

а ты хитрый
давай от абстракций перейдём к реальным задачам.
Так какие у нас реальные задачи?

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

> С find будет как минимум на 1 меньше

Это не так. С xargs будет намного меньше.

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

Ты абсолютно прав, но из под баша это делать неудобно, вот подумываю что то свое написать, по типу irb.

babusha
() автор топика
Ответ на: комментарий от Deleted

думаете если он шелл не осилил, то с руби ситуация сложилась иначе? Да что-то...как-то...как-то я сомневаюсь...
Думаю, ТС просто школьник который по дури скачал учебник по руби и теперь носится тут с ним как проповедник с библией среди папуасов и кричит «Истину! Истину глаголю я вам - вот ответ на все мольбы ваши, заблудшие чернопопые братия!»
В принципе, я так же делал когда узнал про zsh, но с тех пор я стал старше на 2 месяца и меня отпустило.

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

В принципе, я так же делал когда узнал про zsh

Какая самоирония :)

Я zsh ковырял, в чем кардинальное отличие?

babusha
() автор топика
Ответ на: комментарий от babusha

отличия и во многом и если надо то ни в чём.
Совсем кратко для примера общего плана можете посмотреть
http://habrahabr.ru/blogs/linux/82537/
http://michael-prokop.at/blog/2004/07/26/zsh-zargs/
(это можно непосредстенно отнести к данному топику)

в плане скриптинга (который идейно вас должен больше интересовать):
http://www.rayninfo.co.uk/tips/zshtips.html
http://zsh.sourceforge.net/Doc/Release/zsh_toc.html

Но подозреваю в итоге вы свой лозунг
«Фу! Опять башевские костыли! Закопать!»
просто переделаете в
«Фу! Опять зедшеловские костыли! Закопать!»
Если прёт руби то делайте на руби, хотя на данном этапе именно ваши руби варианты и есть монструозные костыли.
Знание модых языков/шеллов не отменяет знание матчасти.

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

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

просто переделаете в

Оно по ссылкам на костыли меньше похоже чем баш, да синтактического сахара в zsh больше чем в баше, а это именно то чего в баше не хватает. Кстати, есть шелл fish, так вот, там конструкция выглядит вот так:

for i in (find | grep [Aa]); echo $i; end

Вот только правда проект заброшен автором :(

именно ваши руби варианты и есть монструозные костыли.

Именно по этому я и создал тему, просто как то понадобилось, а find со своими пробелами все портил, а руби сразу со своим split(/\n/) заманил к себе :)

В общем, спасибо за ссылки, пойду ковырять zsh.

babusha
() автор топика
Ответ на: комментарий от anonymous

А что find уже научился группировать аргументы?

Т.е.

find -name A\* -exec rm '{}' \;

уже не для каждого файла будет запускать свой rm?

anonymous
()
Ответ на: комментарий от babusha

вы так видимо и не поняли фразу про рекурсивный глоббинг. Цикл и find тут не нужны (любителей -xdev просьба не беспокоиться)

sed -i 's/tits/boobs/g' **/*[Aa]*.html
rm $(grep -li hot_lesbians /{home,var}/**/*.log)

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

что касается именно циклов то они в zsh выглядят проще чем в bash - не обязательно указывать do/done

for i (/home/**/{hot,porn}*) rm $i
(это думаю понятно - удалить из /homе и всех вложенных каталогов)
или так
for i in /**/{cold,porn}*(u:babusha:); rm $i
(удалить начиная с корня, принадлежащие пользователю babusha)

Если хочется без цикла то
можно просто rm /home/**/{hot,porn}*
но если коллекци большая то
rm скажет argument list is too long.
Тогда можно через
zargs — /**/b*(u:babusha:) — rm

(либо find/xargs)

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

>> find -name A\* -exec rm '{}' \;

уже не для каждого файла будет запускать свой rm?


Если findutils от проекта GNU, то можно сделать:

find -name 'A*' -exec rm {} +

результат будет аналогичен этому:

find -name 'A*' -print0 | xargs -0 rm

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

Зачем баш, если портабельно бістро и надежно на sh/ash ?

Jetty ★★★★★
()

find | while read l; do echo -$l-; done

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