2012-11-14 2 views
1

У меня есть куча изображений, которые я хочу распечатать, но для правильной печати каждой другой картинки нужно перевернуть по горизонтали. Теперь все изображения png-файлов и помечены как "Foo 001.png", "Foo 002.png". Я думаю, что все, что мне нужно сделать, это посмотреть на часть строки с номером, преобразовать ее в целое число, сделать n%2==0, чтобы проверить, равномерна ли она, и перевернуть ее, если она четна.Перелистывание любого другого изображения в каталоге

Я не знаю, есть ли удобный способ конвертировать из строки в целое число с помощью bash или что бы я использовал, чтобы перевернуть изображение.

+0

Нет, у вас есть переменная, которую вы продолжаете переключать, когда вы перебираете файлы, не зависимо от соглашения об именах файлов. 'X = 0; ...; do X = $ ((1- $ X)); если [$ X -eq 1]; затем ... fi; ... done' – vladr

+1

Не уверен, что я понимаю. Вы хотите перевернуть 1/2 изображения? Перевернувшись, вы имеете в виду поворот? –

+0

@ vladr Это, вероятно, было бы проще, но как я узнаю, в каком порядке будут обрабатываться файлы? Будет ли это в алфавитном порядке? – russjohnson09

ответ

2

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

X=0 

cat filenames | while read -r filename ; do 
    if [ $X -eq 1 ] ; then 
    # flip $filename 
    fi 
    # print $filename 
    X=$((1-$X)) 
done 

Вы можете заменить cat filenames выше ls -1 *.jpg для печати *.jpg файлов в алфавитном порядке, или ls -1v to version-sort them, способ, который не требует порядковых номеров в именах файлов, чтобы быть нулями.

Если есть тысячи файлов, сочетание ls (без маски) и grep или один из find и sort может быть использован вместо выше, чтобы избежать выдувания ARG_MAX предела.

1

Поскольку Баш намного лучше, чем со строками цифр, моя первая мысль была бы

flip Foo\ *{0,2,4,6,8}.png 

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

Предполагается, что команда может принимать несколько имен файлов. Если нет, вы можете использовать цикл:

for f in Foo\ *{0,2,4,6,8}.png; do flip "$f"; done 
1

Если я хорошо понимаю, вы хотите перевернуть изображение 1/2 png? Если да, то:

convert -flip "Foo *{0,2,4,6,8,10}.png" 

или если у вас есть слишком много файлов:

# making an array of files 
files=(*.png) 

# C style for loop (iterating 2 by 2) 
for ((i=0; i< ${#files[@]}; i+=2)) { 
    # fliping the image 
    convert -flip "${files[i]}" 
} 

команда новообращенный является частью известной imagemagick библиотеки.

Смежные вопросы