Bash: Невозможность просмотреть все файлы в каталоге с помощью mediainfo

У меня есть музыкальный каталог на компьютере Debian, который время от времени помещает в него слишком большие файлы. Чтобы помочь мне с возможным удалением этих файлов, я установил mediainfo и создал сценарий, который должен пройти через все файлы в музыкальном каталоге с помощью этой команды.

Я пытаюсь использовать параметр продолжительности, чтобы определить, что нужно удалить, а что нет. Пример ввода:

mediainfo --Inform="General;%Duration%" /home/administrator/music/Example\ Full\ OST.mp4
7838987

Вывод возвращает продолжительность в миллисекундах. Обратите внимание: если в файлах есть пробелы, mediainfo помечает перед ними обратную косую черту. Я учел это в своем скрипте:

#!/bin/bash
for i in /home/administrator/music/*
do
# Changing i to readable form for mediainfo
i=$(echo $i | sed -r 's/[ ^]+/\\&/g')
echo $i
# Go Through files, storing the output to mediadur variable
mediadur=$(mediainfo --Inform="General;%Duration%" $i);
echo $mediadur;
done

эхо-выходы:

/home/administrator/music/Example\ Full\ OST.mp4
 

Вывод mediadur echo ничего не показывает. Но когда я копирую первый вывод эха в первый пример, он показывает тот же результат.

Однако, если в каталоге есть какой-либо носитель, в имени которого нет места, сценарий работает нормально. Вывод скрипта:

/home/administrator/music/546721638279.mp3
83017

Эта проблема меня очень озадачила. Любая помощь приветствуется.


person TukeDuke    schedule 03.05.2016    source источник


Ответы (2)


Вам следует обновить эту строку:

mediadur=$(mediainfo --Inform="General;%Duration%" "$i");

Двойные кавычки предотвратят подстановку и разделение слов

person Samuel    schedule 03.05.2016

На самом деле это не связано с MediaInfo, просто вы указываете неправильное имя файла в командной строке. И MediaInfo не добавляет "обратную косую черту перед ними".

Ваш метод побега работает не так, как вы ожидаете.

#!/bin/bash
for i in music/*
do
    # Go Through files, storing the output to mediadur variable
    mediadur=$(mediainfo --Inform="General;%Duration%" "$i");
    echo $mediadur;
done

Также хорошо работает с именами файлов, имеющими пробелы.

person Jérôme Martinez    schedule 03.05.2016