LINUX.ORG.RU

Bash: разобрать вывод find в строке

 , ,


0

0

Подобная тема уже звучала, но мне надо прервать выполнение в случае... Впрочем, по порядку:

find ./ -depth -type d -exec MyScript {} \;
вместо MyScript нужно воткнуть условие на каждую строчку, выдаваемую find, и в положительном случае вывести на экран и закончить выполнение.

То есть вопрос чисто в разметке, если это возможно.

Помогите?



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

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

Верно,

The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find.

Но если в именах файлов могут попасться спецсимволы, использование read правильнее (а надёжнее будет -print0 + башизм read -d $'\0').

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

aedeph_, AITap, спасибо!

Задней точкой чую, что в моём случае через read делать, но не разберусь с синтаксисом :(

$file="Брестская крепость.2010.DVDRip!.avi"
find ./ -type d -exec bash -c 'if [ -e "{}/$file" ]; then vlc -f {}/$file vlc://quit; exit 0; fi' \;

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

При этом в консоль падает вот такая строка:

vlc -f /media/Films// vlc://quit

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

Ларчик просто, конечно, открывался

$file="Брестская крепость.2010.DVDRip!.avi"
find ./ -name "$file" -exec echo "vlc -f {} vlc://quit" \;
bsb
() автор топика
Ответ на: комментарий от anonymous

Угу, выше я написал, что изучаю. Только суть-то в том, что синтаксис bash'a порой важнее.

В итоге,

$file="Брестская крепость.2010.DVDRip!.avi"
find ./ -iname "$file" | while read film; do vlc -f "$film vlc://quit"; exit 0; done

P.S.: всего лишь одна бессонная ночь. А если бы кто дал дельный совет, вышло бы пять минут. И ладно бы это в будущем пригодилось, а то раз в пятилетку встретится задача...

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

При вызове find c -exec нельзя использовать {} больше одного раза. Если же это необходимо, следует использовать конструкцию типа

find … | xargs -I'{}' echo {} {} {}

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

А если бы кто дал дельный совет, вышло бы пять минут

тебе дали дельный совет - прочитать man. ты его проигнорировал

find ./ -name «$file» -exec echo «vlc -f {} vlc://quit» \; -a -quit

ananas ★★★★★
()

find'ы, exec'и...по давней лоровской традиции топик начался с описания велосипеда, вместо описания задачи и закончился тыканьем в маны
молодец, чо, эталонный лор-тред на твоем счету

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