Скрипт очистки Bash - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь создать скрипт, который удаляет мои изображения, которых нет в БД

Есть мой код (Обновлено): у меня 1 проблема:

  • Проблема саналогичный синтаксис like '%$f%'
#!/bin/bash

db="intranet_carc_development"
user="benjamin"

for f in public/uploads/files/*
do
  if [[ -f "$f" ]]
  then
    psql $db $user -t -v "ON_ERROR_STOP=1" \
    -c 'select * from public.articles where content like "%'"$(basename "$f")"'%"' | grep . \
    && echo "exist" \
    || echo "doesn't exist"
  fi
done

И у меня есть следующая ошибка:

ERROR:  column "%1YOLV3M4-VFb2Hydb0VFMw.png%" does not exist
LINE 1: select * from public.articles where content like "%1YOLV3M4-...
                                                         ^
doesn't exist
ERROR:  column "%wnj8EEd8wuJp4TdUwqrJtA.png%" does not exist
LINE 1: select * from public.articles where content like "%wnj8EEd8w...

РЕДАКТИРОВАТЬ: если я использую \'%$f%\' для like:

/purge_files.sh: line 12: unexpected EOF while looking for matching `"'
./purge_files.sh: line 16: syntax error: unexpected end of file

1 Ответ

0 голосов
/ 01 июня 2018

Есть несколько проблем с вашим кодом:

  • $ f является общедоступной / uploads / files / FILENAME, и я хочу только имя FILENAME

Вы можете использовать basename, чтобы обойти это, написав:

f="$(basename "$f")"
psql $db $user -c "select * from public.articles where content like '%$f%'"...

(здесь приведены дополнительные кавычки для предотвращения проблем, если в имени файла есть пробелы и специальные символы)

Как показано в связанных вопросах, вы можете использоватьследующий синтаксис:

#!/bin/bash

set -o pipefail #needed because of the pipe to grep later on

db="intranet_carc_development"
user="benjamin"

for f in public/uploads/files/*
do
  if [[ -f "$f" ]]
  then
    f="$(basename "$f")"
    psql $db $user -t -v "ON_ERROR_STOP=1" \
    -c "select * from public.articles where content like '%$f%'" | grep . \
    && echo "exist" \
    || echo "doesn't exist"
  fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...