Вероятно, как вы подозревали, просто незначительное изменение, чтобы исправить, попробуйте вместо этого:
if [[ ! -z "$image" ]]; then
Предположим, что при совпадении exiftool и grep переменная $ image
содержит следующее:
abcabcabc
Но при отсутствии выходных данных $ image
содержит: (ничего)
В тестовом состоянии:
if [[ ! -z "$image// }" ]]; then
Итак, в первом случае bash видит это:
if [[ ! -z "abcabcabc// }" ]]; then
Но во втором случае bash видит это:
if [[ ! -z "// }" ]]; then
Тест говорит , если «//} »НЕ равно нулю, то...
однако «//} »
всегда не будет нулевым значением, это что-то, это последовательность, состоящая из двух косых черт космоса и фигурной скобки. Так как там что-то есть, что-то не нулевое значение, вот почему то
часть запускается, даже когда у вас нет совпадений в $ image
. Таким образом, удаление этого //}
должно работать.
Другой вариант:
if [[ -n "$image" ]]; then
, чтобы проверить, содержит ли переменная $ image
нечто, а не ! -z...
Содержат ли файлы .7z более одного экземпляра одного и того же имени файла? Я полагаю, что нет, потому что вы mv-ing их всех в тот же каталог «$ dest».
В этом случае лучше использовать команду mv
вне цикла, частично потому, что будет выполняться только одна команда mv
total (а не одна команда mv
на файл .7z), но в основном потому, что вероятнее всего будет хотя бы один файл, соответствующий вашему образцу. И вы можете сохранить двойные кавычки вокруг переменных, что гораздо безопаснее, если в них есть имена файлов со значимыми символами оболочки или глобуса.
Если для одной команды mv
извлечено слишком много файлов, можно использовать find
, что-то подобное:
find "$extractDir" -name "$FILEMASK.xml" -exec mv {} "$dest/" +
Лучше всего использовать find
в любом случае - вы никогда не знаете заранее, сколько файлов будет извлечено, и это полезно защитное программирование. Он также имеет преимущество в том, что не делает точно ничего, если не найдено соответствующих файлов, так что mv
не будет жаловаться на отсутствующие файлы.
El módulo existe en /home/pi/warcarrier/lib
y el script intenta cargarlo como lib/GMAPS.pm
.
Esto significa que el uso de -I /home/pi/warcarrier/lib
hará que Perl busque /home/pi/warcarrier/lib/lib/GMAPS.pm
.
Use -I /home/pi/warcarrier
en su lugar.