LINUX.ORG.RU

find: Как вывести список найденых файлов с пробелом вместо новой сторки в качестве разделителя?

 ,


0

1


Последнее исправление: bbgg (всего исправлений: 1)
Ответ на: комментарий от bbgg

Нужно из bash, наподобие echo ${FILES[@]} | xargs | app, на я запутался.

Так в студию содержимое FILES и правильный пример вызова app с несколькими файлами.

А то у тебя:

  • то какой-то app "${files}", что означает передать всё одним аргументом.
  • то 'chromium-118.0.5993.117.tar.xz': no such file or directory что говорит о том, что ты кавычки в ТЕЛО аргумента запихнул.
AlexVR ★★★★★
()
Ответ на: комментарий от kaldeon

Да, мне нужно было это, а не велосипедить с find, уже сам догадался, но это выдаёт Слишком длинный список аргументов, и теперь я не понимаю как разделить их с помощью xargs.

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

крч: Вот код

files=$(find)
...
for f in ${files}
do
 app ${f}
done
...

И я захотел app ${files[@]}, но не завелось, не сразу догнал что нужно было app "${files[@]}" и подумав что [@] делает что-то другое и наоборот начал велосипедить с find, но не всё так просто, app «${files[@]}» не влезает.

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

протрезветь

обязательно

и потом подумать

обязательно

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

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

С чего взял что я знаю что такое эти ваши тело и всё одним аргументом, я не понимаю почему вместо "'file' 'file'" передаётся 'file' 'file' и почему 'file' не находится, я ожидал что если заключить «${files[@]}» будет не 'file' 'file' а именноматьего \$\{files\[\@\]\}

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

И зачем тогда такой шелл нужен? Так нельзя, эдак нельзя, туда не ходи, это неправильно. Шелл специально сделан таким, чтобы все перечисленные варианты были удобными. Там ограничения далеко не критичные, местами преувеличенные.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от bbgg

Но мне нужно не из find ->, а из переменной bash -> xargs -> app.

ак работает вроде files=$(find);

«Вы или крестик снимите, или трусы наденьте»

Можешь объяснить, зачем ты засовывываешь вывод find в переменную? Чтобы что? Страдать от этого и не знать, что делать дальше?

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от kaldeon

Он весь тред страдает от того, что не может передать список файлов в программу через переменную. То с кавычками запутался, то уперся в лимит числа аргументов

Но как же без переменной-то?

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

Мне это важно (хоть и не решает мою проблему (уже наверное решённую)), потому что не хочу вызывать xargs, ещё и дважды. Хотя неоднократный вызов xargs частично решается "${files[@]}", а другое с помощью ulimit (хотя я не проверял).

bbgg
() автор топика
Ответ на: комментарий от bbgg
$ cat dyatel.sh 
#!/usr/bin/env bash

mkdir test

for ((i=0; i<100; i++)); do
        touch "test/file $i.txt"
done

find ./test -type f -print0 | xargs -0 -n 10 ./tormoz.sh
$ cat tormoz.sh 
#!/usr/bin/env bash

echo "$$: run ls"
ls "$@"

echo "$$: run stat"
stat -c '%w' "$@"
./dyatel.sh
router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от bbgg

ага, и эту команду будет делать опять bash через printf «-exec app1 {} +» $100500, который я не понимаю.

Для того, чтобы понять эту команду, попробуйте

  1. протрезветь
  2. включить мозг
  3. прочитать любую книгу по bash
router ★★★★★
()
Ответ на: комментарий от bbgg

Ну если хочется поговнокодить, то пожалуйста:

while read f; do
  app "$f"
done <<< $(find)

А большой список аргументов вы не сможете использовать. Есть ограничение на агрументы для команды в 128kb (если правильно помню).

ALiEN175
()
Последнее исправление: ALiEN175 (всего исправлений: 1)