Страница пересобрана: 07:16 13.01.2018
[d | an-b-bro-fr-hr-l-m-med-mi-mu-ne-o-ph-r-s-sci-sp-tran-tv-x | bg-vg | au-tr | a-aa-c-fi-jp-rm-tan-to-vn | gf | azu-dn-hau-ls-ma-maid-me-mo-p-sos-t-w | misc-vnd | stat ]
[Burichan] [Futaba] [Gurochan] - [Архив - Каталог] [Главная]

[Назад]
Ответ
Файл: 1515710346720.jpg -(56 KB, 620x520, 1440774292087.jpg)
56 No.200288  

Почему find не умеет в exec подставлять строки формата из своего же printf? Это же прямо напрашивается!

Пришлось ставить целый GNU Parallel на перле.

>> No.200289  

Стоп, помедленнее.
В чем задача? Зачем непременно -exec? Зачем после этого непременно Perl, а не "скормить выхлоп find в pipe для какого-нить цикла"?

>> No.200292  

>>200289
Ну вот хочется мне передать во внешнюю команду не только файл сам по себе, но и кое-что из того, что find может очень удобно выводить в -printf. Парочку аргументов, в общем. Причём по очереди, а не все сразу. Но -exec может подставлять только сам этот файл на место скобочек! Хотя формат вроде -exec {%b%Ak\a} ну прямо-таки напрашивается.
Ну хорошо, отправляем вывод find ... -printf -printf через трубу в xargs. Указываем ему -n 2, чтобы он запускал команду по очереди с каждыми двумя из списка пришедших из трубы. Но подставлять он их умеет только в конец команды. Ну или в любое место через -I {} ... [команда] {}, но только передавая входные строки по одной! А мне по две.

А вот GNU Parallel — это такой xargs, но улучшенный и вообще. Даже по флагам с ним совпадает. И на перле. И он может подставлять позиционные аргументы в команду куда угодно и в любом количестве через {1}, {2} и так далее. Ну и ещё разные штучки. Что, собственно, и было необходимо. А вот стандартные инструменты пробаковали такую простую задачу!

>> No.200293  
>стандартные инструменты

Ну, GNU is Not Usable, да. Я сам использую find только для чего-то простого.

>Ну вот хочется мне

Идея.
find stuff -printf %s%t%u%f%f | (while read line; do stuff with $line; done)
Несколько строк можно обработать так. Проверил - работает, лол, только зайди в неглубокую директорию или поставь ограничение на рекурсию, ну ты понял.
find -type f -printf "%p\n%s\n" | (while read line1; do read line2; echo "adin=$line1" "dva=$line2"; done)
Естественно, вместо echo что угодно может быть. Может, я дебил, но я в жизни не использовал xargs.



Удалить сообщение []
Пароль
[d | an-b-bro-fr-hr-l-m-med-mi-mu-ne-o-ph-r-s-sci-sp-tran-tv-x | bg-vg | au-tr | a-aa-c-fi-jp-rm-tan-to-vn | gf | azu-dn-hau-ls-ma-maid-me-mo-p-sos-t-w | misc-vnd | stat ]
[Burichan] [Futaba] [Gurochan] - [Архив - Каталог] [Главная]