Как найти ресурсы для того, чтобы запустить скрипт сервер Ubuntu

Если кто-либо может указать на меня на направление того, где я могу узнать больше об этом типе работы, я ценил бы его. Я имею некоторый опыт при сценариях с php больше, чем что-нибудь и работал над изучением Linux (сервер Ubuntu CLI через SSH и SFTP для движущихся файлов в и из моего VM).

Попытка к повторным изображениям пакетной обработки в нескольких каталогах. Я использую imagemagick, который работает над одним файлом за один раз.

Я хотел бы за это выполнить запуск в главном каталоге и затем сделать это задание во все jpg файлы, которые может найти сценарий.

псевдо код -

for all folders in the directory
  open folder
  check if folder "drawings" (if !exists) then {start the loop over} else :
    open drawings folder
    for each file in drawings
      if file is a jpg
        run this program on it (convert image.jpg -crop 713x470+5+3 output.jpg)
3
задан 11 November 2016 в 16:34

3 ответа

Вычисленный то, что я должен был сделать мудрый циклом, просто должно было получить подвешивание синтаксис цикла . Надежда это помогает кому-то еще, который, возможно, должен был бы циклично выполниться через подкаталог на основе, он - имя.

for dir in */
do
    for subdir in $PWD/"$dir"*/
    do
        if [ "$subdir" == $PWD/"$dir""Drawings"*/ ]
        then
            for file in "$subdir"*.jpg
            do
                rm "$file"
            done

            for file in "$subdir"*.pdf
            do
                newName="${file/.pdf/}"
                convert -density 200 "$file" -append -resize 850 -background white -flatten "$newName".jpg
            done

            for file in "$subdir"*.jpg
            do
                newName="${file/.jpg/}"
                if [[ "$file" == *"insulation"* ]]
                then
                    convert "$file" -crop 820x710+15+97 "$newName-cropped.jpg"
                else
                    convert "$file" -crop 820x870+15+79 "$newName-cropped.jpg"
                fi
            done
        fi
    done
done
exit 0
2
ответ дан 1 December 2019 в 16:21

Это - то, что я придумал

#!/bin/bash
dnames=$(for i in $(ls -d $1*/); do echo ${i}; done)
if [ "$#" -eq "1" ]; then
    for dir in $dnames
    do
            cd $1
            cd $dir
            if [ -d "drawings" ]; then
                    cd drawings
                    jpgfiles=$(ls -p | grep -v / | awk '/.jp[e]?g/{print $0}')
                    if [ -z "$jpgfiles" ]; then
                            echo "Directory drawings exist in $dir but no .jpg images were found"
                    else
                            for jpgs in $jpgfiles
                            do
                                    echo "found $jpgs in ${dir}drawings" #convert $jpgs -crop 713x470+5+3 output.jpg
                            done
                    fi
            else
                    echo "Directory drawings cannot be found in $dir"
            fi
    done
else
    echo "A full path to the directory must be given"
    echo "For instance, /home/user1/Pictures/"
fi

Это должно быть выполнено с одним параметром, в котором параметр является полным путем к каталогу. Например, если я собираюсь искать ту папку рисунков, которая может быть расположена в подкаталоге в моем/home/joram/каталоге

Это было бы похоже на это

myprogram /home/joram/

Программные циклы в/home/joram/через все каталоги это содержит. Затем это посещает каждый каталог в/home/joram/в надежде на нахождение подпапки рисунков. Когда программа находит папку рисунков, которая содержит изображения .jpg, команды инициированы. После окончания команд программа продолжает цикл, пока все каталоги проверяются.

Пример вывода программы:

#Directory drawings cannot be found in /home/joram/Desktop/
#Directory drawings cannot be found in /home/joram/Documents/
#Directory drawings exist in /home/joram/Downloads/ but no .jpg images were found
#Directory drawings cannot be found in /home/joram/Music/
#Directory drawings cannot be found in /home/joram/my_scripts/
#found test2.jpeg in /home/joram/Pictures/drawings
#found test.jpg in /home/joram/Pictures/drawings
#Directory drawings cannot be found in /home/joram/Public/

Примечание: В он - текущая форма, программа просто печатает .jpg файлы, это нашло и дает некоторую другую информацию также (Никакие другие инициированные команды). Таким образом, это может быть протестировано прежде, чем сделать фактическую вещь. Чтобы заставить программу добраться, что Вы хотите, удалите часть эха и не прокомментируйте команду на строке 16 (Если это - фактическая команда, Вы хотите работать).

Улучшения могли быть сделаны, надежда, это помогает Вам так или иначе!

1
ответ дан 1 December 2019 в 16:21

Алгоритм должен быть точно тем же, или Вы просто заботитесь о результате? Поскольку я думаю, что Вы могли создать намного короче и более легкий код, если Вы используете find для обхода каталога и поиска:

find /path/to/search-root -path '*/drawings/*.jpg' -execdir convert -crop 713x470+5+3 {} output.jpg \;

Это найдет все *.jpg файлы, которые являются (главные-) дети названных каталогов drawings и выполненный convert команда на них. Последние продукты файл output.jpg в том же каталоге как исходный файл. Если существует несколько исходных файлов в том же каталоге предыдущее output.jpg экземпляр будет перезаписан.

Если Вы хотите хотеть различные, “уникальные” имена выходного файла относительно не, перезаписывают предыдущие результаты, необходимо будет преобразовать имя выходного файла так или иначе. К сожалению, find не может сделать этого, но мы можем делегировать ту задачу к оболочке. Существует несколько способов достигнуть этого, хотя я обычно предпочитаю канал a while read цикл, потому что это является менее раздражающим, чем выход из специальных символов:

find /path/to/search-root -path '*/drawings/*.jpg' -print0 |
while IFS= read -rd '' f; do
  convert -crop 713x470+5+3 "$f" "${f%.*}.output.jpg"
done

(Это требует оболочки с поддержкой read -d как Bash. При необходимости в более портативной альтернативе, скажите так.)

0
ответ дан 1 December 2019 в 16:21

Другие вопросы по тегам:

Похожие вопросы: