尝试编写使用vlc创建播放列表的脚本。
#!/bin/bash
filename=/media/*/*.mp3
while [ "$1" != "" ]; do
case $1 in
-f | --filepath ) shift
filename=$1
;;
-h | --help ) usage
exit
;;
* ) usage
exit 1
esac
shift
done
#echo $filename
vlc $filename --novideo --quiet此脚本正在运行,但它只在任何usb设备的根目录中找到mp3文件。所以我想要更改文件名变量。这段代码给出了类似的结果,但它列出了每一项。
filename=$(find /media/* -name *.mp3 -print)
filename=$(tr '\n' ' ' <<<$filename)现在的问题是,我不能把它当作一个论据。我试过:
vlc $filename --novideo --quiet
or
vlc $*filename --novideo --quiet
or
vlc "$filename" --novideo --quiet什么都没用。有什么建议吗?
更新:
伙计们,我需要帮助的问题是如何使vlc接受文件名变量作为参数或文件的参数,以便在播放列表中使用。文件名
/media/MULTIBOOT/Linkin Park - In The End.mp3 /media/MULTIBOOT/Man with a
Mission ft. Takuma - Database.mp3 /media/MULTIBOOT/Sick Puppies - You're
Going Down.mp3 /media/MULTIBOOT/Skillet - Rise.mp3 /media/MULTIBOOT/Song
Riders - Be.mp3 /media/MULTIBOOT/30 Seconds to Mars - This is War.mp3
/media/MULTIBOOT/Fade - One Reason.mp3现在这是一个字符串,如何使用它的文件路径参数?
发布于 2015-09-22 17:24:58
我将使用bash的递归全局和数组:
#!/bin/bash
shopt -s globstar nullglob
files=()
while [[ $1 ]]; do
case $1 in
-f | --filepath ) shift
files+=("$1")
;;
-h | --help ) usage
exit
;;
* ) usage
exit 1
esac
shift
done
if [[ ${#files[@]} -eq 0 ]]; then
files=( /media/**/*.mp3 )
if [[ ${#files[@]} -eq 0 ]]; then
echo "no mp3 files found"
exit 1
fi
fi
#printf "%s\n" "${files[@]}"
vlc "${files[@]}" --novideo --quiet使用此代码,您可以多次指定-f filename来播放几首歌曲。
发布于 2015-09-22 17:18:35
你需要引用*.mp3的话。否则,它将在当前目录中展开。
filename=$(find /media/* -name '*.mp3' -print)您也不需要删除换行符。如果不引用变量,则所有空格(包括换行符)都将转换为单词分隔符。
发布于 2015-09-22 17:25:08
与其将所有文件名存储在变量中,不如告诉find使用所有文件调用应用程序。这将防止空格、换行符等方面的问题:
find /media -name '*.mp3' -exec vlc --novideo --quiet \{\} \+https://stackoverflow.com/questions/32722900
复制相似问题