Поиск и управление элементом массива в KSH

$()расширяется должным образом, но оболочка делает больше для результата, чем вы знаете. Кроме того, добавление буквенных кавычек к путевым именам почти никогда не бывает правильным (, если только вы не используете evalгде-то ).

Воспроизведение всех файлов MP3 в диапазоне ~/Documents/musicили ниже с помощьюvlc:

find ~/Documents/music -type f -name '*.mp3' -exec vlc {} +

Это запустит vlcкак можно больше файлов MP3 одновременно.

Чтобы пропустить использование findвсех -вместе:

shopt -s globstar
vlc ~/Documents/music/**/*.mp3

Это будет работать до тех пор, пока у вас не будет большого количества файлов MP3 (, и в этом случае вы получите сообщение об ошибке, поскольку список аргументов станет слишком длинным ).

Универсальный объект **"рекурсивно" соответствует файловой иерархии, но должен быть включен с помощью shopt -s globstarвbash(оболочке zshэтот глобус включен по умолчанию ).


Ваша команда

vlc $(echo $(find ~/Documents/music -name "*.mp3" -exec echo "\"{}\" \n " \;) | head -n 1)

сначала выполнит find,headи echo. Этот конвейер будет выводить

"/home/XXX/Documents/music/My Folder/1 - track/the name of track.mp3"

Затем оболочка разбивает эту строку на слова "/home/XXX/Documents/music/My, Folder/1, -, track/the, name, ofи track.mp3"по пробелам в строке.

Затем

vlcбудет вызываться с этими отдельными аргументами. В частности, аргумент -может быть ошибочно принят за параметр, в то время как другие, скорее всего, будут восприниматься как отдельные операнды имени пути.

Это подробно объясняется в

0
06.10.2021, 19:36
0 ответов

Теги

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