[d | an / b / bro / ci / cu / dev / fr / gf / hr / l / m / med / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / abe / c / fi / jp / rm / tan / to / ts / vn / vo]
[Burichan] [Futaba] [Gurochan] - [iiChantra] [Радио 410] [ii.booru-Архив РПГ] [acomics-cf-ost] [Cirnoid] [@] - [Архив - Каталог] [Главная]

[Назад]
Ответ
Leave these fields empty (spam trap):
Имя
Тема
Сообщение
Файл
Подтверждение
Перейти к [
Пароль (для удаления файлов и сообщений)
 
ЗАПРЕЩЕНО:
  • детская эротика/порнография
  • троллинг
 
  • Поддерживаются файлы типов GIF, JPG, MP4, OGV, PNG, WEBM размером до 4096 кБ.
  • Максимальное количество бампов треда: 500.
  • Всем посетителям рекомендуется ознакомиться с FAQ.

Файл: 1515710346720.jpg - (56 KB, 620x520, 1440774292087.jpg)  
56 KB №200288  

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

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

>> №200289  

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

>> №200292  

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

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

>> №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 / ci / cu / dev / fr / gf / hr / l / m / med / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / abe / c / fi / jp / rm / tan / to / ts / vn / vo]
[Burichan] [Futaba] [Gurochan] - [iiChantra] [Радио 410] [ii.booru-Архив РПГ] [acomics-cf-ost] [Cirnoid] [@] - [Архив - Каталог] [Главная]