LINUX.ORG.RU

поиск картинок + eog

 , , , ,


0

1

Почему так ?

eog $(find /home/user/old_home_d/ |grep '.*\.jpg$' | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' ')
out:
Unknown option -Вечный
Run 'eog --help' to see a full list of available command line options.

find /home/user/old_home_d/ |grep '.*\.jpg$' | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '

out:

"/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet11.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet02.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet03.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet04.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/inlay.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet05.jpg"
"/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/back.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet08.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/Covers/booklet10.jpg" "/home/user/old_home_d/audio/music/eng/Tic Tac Toe/Tic Tac Toe - Ist der Ruf erst ruiniert (2000)/folder.jpg"

★★★★

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

Если в имени файла есть пробелы, то $() нужно брать в кавычки «$()».

find /home/user/old_home_d/ |grep '.*\.jpg$'

Это можно заменить вот так:

find /home/user/old_home_d/ -iname "*.jpg"

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87
eog "$(find /home/user/old_home_d/ -iname "*.jpg")"

out:

-bash: /usr/bin/eog: Argument list too long

И если заэкранировать:

eog \"$(find /home/user/old_home_d/ -iname "*.jpg")\"
out:
Unknown option -Вечный
Run 'eog --help' to see a full list of available command line options.

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

-bash: /usr/bin/eog: Argument list too long

Ну а что ты хотел? У программы eog на фход должен подаваться аргумент только с одним имением файла. Он открывает только один файл, а ты хочешь открыть сразу 10.

И если заэкранировать: eog \«$(find /home/user/old_home_d/ -iname »*.jpg")\"

Зачем? Ты не понимаешь что делаешь.

Напиши лучше что ты хочешь.

Если хочешь просто открыть каждый найденный файл в отдельной копии программы eog, то это делается вот так:

find /home/user/old_home_d/ -iname "*.jpg" -exec eog {} \;

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

А что тут не ясного-то ?:) Я хочу просканить все картинки в директории и открыть их во вьювере, чтобы посмотреть всё.

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

Ну удачи, читай документацию по eog и разберись сколько файлов можно передать в качестве параметров.

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

Можешь попробовать создать директорию и в неё накидать симовльных ссылок на найденные картинки, а затем запустить eog с первым файлом (символьной ссылкой) в этой директории, ну а далее стрелочками листай файлы.

kostik87 ★★★★★
()

В треде советуют не то.

Делай так

while read f; do
	eog "$f"
done < <(find /home/user/old_home_d/ |grep '.*\.jpg$' | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' ')

- если необходимо для каждого файла запустить eog. Т. е. eog a; eog b; eog c; ....

И

declare -a eog=( eog )

while read f; do
	eog+=( "$f" )
done < <(find /home/user/old_home_d/ |grep '.*\.jpg$' | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' ')

"${eog[@]}"

- если необходимо для всех файлов запустить один eog. Т. е. eog a b c ....

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

Ой. Только сейчас посмотрел, что за команда у тебя там. Так вот. Как показал я - тоже не то.

Делай так

declare -a eog=( eog )

while read f; do
	eog+=( "$f" )
done < <(find /home/user/old_home_d/ |grep '.*\.jpg$')

"${eog[@]}"

По тем убранным командам сейчас я понял, что ты хотел сделать, и поэтому здесь один вариант. Ещё find ... | grep ... лучше заменить на тот вариант, который предложил kostik87 - в этом случае не будет вызываться ещё один процесс (т. е. grep).

pavelshuvalov
()

Про herp "$(derp)" вместо herp $(derp) тебе уже сказали, но ещё есть ограничение на число аргументов. Обычно это обходится через xargs, но с гуёвой программой это не прокатит. Если проблема встанет я бы создал временную директорию и навалил бы в неё симлинков.

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