Удалить расширение имени файла, если он существует

Вы можете увидеть список 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

1
22.01.2019, 14:16
2 ответа

Если вы установили prename, вы можете запустить что-то вроде

prename 's/\.xfr$// and print "$_ resended\n"' ~/test/*  >  f.log
0
27.01.2020, 23:31

Немного изменим ваш первый скрипт:

#!/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

Я сделал здесь две вещи:

  1. Перенаправление в файл журнала будет обрезать файл журнала на каждой итерации, поэтому вместо этого я переместил его в конец done, чтобы он перенаправлял весь стандартный вывод цикла.

  2. Если шаблон не соответствует ни одному имени файла, по умолчанию он останется нераскрытым. Я обнаруживаю это с помощью теста -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. Это также то, что я использовал в своем коде выше. Не забудьте заключить в двойные -кавычки все раскрытия переменных!

2
27.01.2020, 23:31

Теги

Похожие вопросы