Проблема при создании файла (при наличии пробелов)

#bash #shell #scripting

#bash #оболочка #создание сценариев

Вопрос:

Я написал пару сценариев для генерации QR-кода каждый раз, когда файл .cia загружается на мой домашний ftp, чтобы просмотреть папку, которую я использовал inotify. Проблема возникает, когда у меня есть файл с пробелами, имеющий «one two three.cia», он сгенерирует 4 QR-кода: one.png, two.png, three.png и one_two_three.png (который является единственным, который мне нужен).

РЕДАКТИРОВАТЬ: Если я запущу ./ despacer «имя файла one.cia», а затем ./ rename, я получу желаемый результат. Я предполагаю, что это сужает проблему до qr.sh

Идеи? Большое спасибо!

qr.sh

 #!/usr/bin/env bash

dir=/ftproot
while true 
do

inotifywait -m -q --format '%w%f' -e create,moved_to $dir | while read FILE; do
        if [[ $FILE == *.cia ]]; then /ftproot/despacer.sh "$FILE" amp; /ftproot/rename.sh
        fi
        done
done
  

despacer.sh

 #!/bin/bash

mv "$1" `echo $1 | sed 's/ /_/g'` 2>/dev/null
  

rename.sh

 #!/bin/bash

basename -s .cia *.cia > qr.txt

for i in $(cat qr.txt);
do qrencode -o $i.png http://www.mywebsite.com/$i.cia
done

mv *.png qr/
rm qr.txt

exit
  

Комментарии:

1. Однако вам следует запускать свои скрипты shellcheck.net

Ответ №1:

Существует несколько проблем с кавычками, это причина сбоя с пробелами. Наиболее проблематичным является вызываемый вами скрипт rename.sh .

Все три отредактированных:

qr.sh

 #!/bin/bash

dir=/ftproot
while true 
do
    inotifywait -m -q --format '%w%f' -e create,moved_to "$dir" |
    while read -r FILE; do
        if [[ $FILE == *.cia ]]
        then
            /ftproot/despacer.sh "$FILE" amp; /ftproot/rename.sh "$FILE"
        fi
    done
done
  

despacer

 #!/bin/bash

mv "$1" "${1// /_}"
  

rename.sh

 #!/bin/bash

encode(){
                for i in "${@#.cia}";
                do qrencode -o "$i.png" "http://www.mywebsite.com/$i.cia"
                done
        }

encode "$@"
mv ./*.png qr/
  

Я не запускал скрипты, но считаю, что они верны.

Комментарии:

1. Спасибо! проверено, и единственная проблема заключается в том, что он создает 2 файла png, один с пробелами, а другой без пробелов