mpd не может найти музыкальные файлы в Ubuntu 16.04

Хорошо, давайте разложим это на кусочки:

  1. Принять имя файла в качестве аргумента
  2. Убедиться, что файл существует (и является обычным файлом)
  3. Найти все (символические) ссылки на файл в $HOME
  4. Отправить этот список файлов по почте в $LOGUSER

Сценарий может принимать аргумент (или несколько). Аргументы командной строки доступны в позиционных параметрах $1, $2 и т.д. Поскольку мы получим только один аргумент, нас интересует только то, что находится в $1.

name="$1"

Чтобы проверить, существует ли имя, мы можем использовать

if [ -e "$name" ]; then ... fi

В данном случае нас интересует, существует ли имя не:

if [ ! -e "$name" ]; then
   echo 'Name does not exist in directory' >&2
   exit 1
fi

Поскольку мы выводим диагностическое сообщение (в данном случае сообщение об ошибке), мы делаем это в стандартный поток ошибок, перенаправляя вывод из echo с помощью >&2. Мы также завершаем сценарий с ненулевым статусом выхода, чтобы сообщить, что что-то пошло не так.

Если мы хотим убедиться, что файл не только существует, но и что это обычный файл, то есть не каталог, не узел устройства или что-то еще, измените -e на -f (читайте руководство test).

Чтобы найти все символические ссылки в нашем домашнем каталоге, мы можем использовать

find "$HOME" -type l

С помощью bash или ksh93 мы можем просмотреть эти файлы и сравнить их с файлом, который нам дал пользователь using

if [[ "$name" -ef "$link" ]]; then ... fi

где $name будет $1, а $link будет именем символической ссылки, полученной из find. Оператор -ef вернет истинное значение, если два операнда ссылаются на один и тот же файл (после разрешения всех символических ссылок).

Можно объединить find с приведенным выше тестом следующим образом:

find "$HOME" -type l |
while read -r link; do
    if [[ "$name" -ef "$link" ]]; then
        printf '%s\n' "$link"
    fi
done

Чтобы отправить электронное письмо, используйте команду mail. Это может быть добавлено в конец предыдущего конвейера:

find "$HOME" -type l |
while read -r link; do
    if [[ "$name" -ef "$link" ]]; then
        printf '%s\n' "$link"
    fi
done |
mail -s "These are the links" "$LOGUSER@localhost"

$LOGUSER будет содержать ваше имя пользователя. Используйте "$(id -un)", если $LOGUSER по какой-то причине не установлен должным образом, или просто замените всю строку на любой адрес электронной почты, который вы хотите использовать.

1
11.07.2017, 09:57
1 ответ

Я сам разобрался :вам следует использовать

mpd_music_dir = "/home/sunqingyao/Music"

вместо

mpd_music_dir = /home/sunqingyao/Music

Нельзя опускать кавычки.

0
28.01.2020, 00:52

Теги

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