bash сравнить файлы между папками, и если они не выходят, сделать что-то - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть папка с обычными изображениями, а другая - с измененными.

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

Я использую echo для простоты, потому что у меня не работает сравнение.

for file in ../regular/*.jpg;
do   
    img=`basename "$file"`

    FILE=./resized/$img

    if [ ! -f "$FILE" ]; then
        echo "$img NOT RESIZED"
    fi  
done

Этот код просто повторяет NOT RESIZED для всех изображений в обычной папке, т.е. похоже, что сравнение вообще делают.

Где моя ошибка?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020
for file in ../regular/*.jpg;
FILE=./resized/$img
  1. Попробуйте использовать абсолютный путь. Вы также можете добавить echo $ FILE, чтобы посмотреть, какие сценарии пытаются проверить
  2. Если этот каталог содержит огромное количество файлов, вы можете превысить командную строку ограничение длины (обычно ~ 4kb-32kb)
  3. Вы используете квоты в команде basename, почему? Если ваши изображения могут содержать пробелы, вы должны использовать квоты также в команде «if», проверьте скрипт ниже
for file in ../regular/*.jpg;
do   
    img=$(basename "$file")
    if [ ! -f "./resized/$img" ]; then
        echo "$img NOT RESIZED"
    fi  
done
0 голосов
/ 04 апреля 2020

Вы должны попытаться использовать команду diff для сравнения каталогов:

diff -r "$PATH1" "$PATH2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...