Вы можете увидеть список Depends
внутри файла DEBIAN / control
двоичного пакета libmysqld-dev_5 .7.11-1debian8_amd64.deb
, затем загрузите и установите те, которых нет в вашей системе.
Пример
> wget http://cdn.mysql.com//Downloads/MySQL-5.7/libmysqld-dev_5.7.11-1debian8_amd64.deb
> ar x libmysqld-dev_5.7.11-1debian8_amd64.deb
> tar xf control.tar.gz
> cat control | grep Depends
Depends: libmysqlclient-dev (= 5.7.11-1debian8)
Если у вас слишком много неустановленных зависимостей, я рекомендую вам установить ключ GPG
этого репозитория debian
и добавить ] source
в /etc/apt/sources.list
, как описано поставщиком этого двоичного пакета
.
Краткое руководство по использованию репозитория MySQL APT
Это строка, которую вы должны добавить в /etc/apt/sources.list
или любой .list
файл insde /etc/apt/sources.list.d/
:
deb http://repo.mysql.com/apt/debian jessie mysql-5.7
Чтобы установить открытый ключ MySQL GPG
, вы можете запустить:
> gpg --recv-keys 5072E1F5
> gpg --export 5072E1F5 > /etc/apt/trusted.gpg.d/5072E1F5.gpg
После выполнения apt-get update
вы сможете установить нужный пакет, используя dpkg -i
и даже запустив apt-get install libmysqld-dev
Если вы установили prename
, вы можете запустить что-то вроде
prename 's/\.xfr$// and print "$_ resended\n"' ~/test/* > f.log
Немного изменим ваш первый скрипт:
#!/bin/bash
for file in ~/Test/Files/*.xfr
do
if [ ! -e "$file" ]; then
echo 'no files were renamed'
break
fi
mv "$file" "${file%.xfr}"
echo "$file has been renamed"
done > ~/Test/log.txt
Я сделал здесь две вещи:
Перенаправление в файл журнала будет обрезать файл журнала на каждой итерации, поэтому вместо этого я переместил его в конец done
, чтобы он перенаправлял весь стандартный вывод цикла.
Если шаблон не соответствует ни одному имени файла, по умолчанию он останется нераскрытым. Я обнаруживаю это с помощью теста -e
и вывожу специальное сообщение. Тогда я break
выпал из цикла.
Альтернатива:
#!/bin/bash
for file in "$HOME/Test/Files"/*.xfr
do
if [ -e "$file" ]; then
mv "$file" "${file%.xfr}"
printf '%s has been renamed\n' "$file"
else
echo 'no files were renamed'
fi
done >"$HOME/Test/log.txt"
Здесь я просто немного изменил поток и использовал $HOME
вместо тильды (выглядит лучше в скрипте ИМХО ). Я также использую printf
вместо echo
, так как это обычно безопаснее для вывода переменных данных (, см., например. " Почему printf лучше, чем echo? " ).
Оба приведенных выше варианта также могут работать с /bin/sh
, а не с /bin/bash
.
Другой вариант, если вы хотите написать больше «отчета»:
#!/bin/bash
shopt -s nullglob
xfr_files=( "$HOME/Test/Files"/*.xfr )
for file in "${xfr_files[@]}"; do
mv "$file" "${file%.xfr}"
done
printf '%d files renamed\n' "${#xfr_files[@]}"
if [ "${#xfr_files[@]}" -gt 0 ]; then
printf '\t%s\n' "${xfr_files[@]}"
fi
Это устанавливает параметр оболочки nullglob
в bash
, который заставляет шаблоны расширяться до нуля, если нет совпадений. Затем он записывает количество переименованных файлов, и если это число больше нуля, он также перечисляет имена файлов с отступом табуляции.
В обновленном вопросе вы используете переменную PATH
. Это переменная, которая содержит путь поиска для утилит оболочки, и установка для нее значения, отличного от списка каталогов с разделителями :
-, скорее всего, сделает оболочку неспособной найти mv
и другие распространенные инструменты.
Как правило, избегайте использования имен переменных в верхнем регистре в сценариях оболочки,вместо этого используйте строчные или, возможно, смешанные -регистровые переменные. Таким образом, вы избегаете случайного переопределения важных переменных, которые может использовать оболочка.
Дополнительно , тест [ -e $PATH/$file ]
должен читаться как [ -e "$file" ]
, поскольку путь уже включен в значение $file
. Это также то, что я использовал в своем коде выше. Не забудьте заключить в двойные -кавычки все раскрытия переменных!