我想删除当前正在播放的 MP3 文件mplayer
。如果可能的话,我想使用命令来执行此操作mplayer
。这样我就不必退出mplayer
并使用删除此文件rm
或打开另一个终端并在那里删除该文件。
答案1
是的,可以而且很容易。我使用以下修改版本来整理/修剪我的媒体收藏。
(1)保存以下 bash 脚本(rmplaying.sh)
#/bin/bash
# rmplaying.sh
# only works when exactly 1 instance of mplayer is running
function playing {
PID=`pidof mplayer`
WHICH=`which mplayer`
if [ $PID ]; then
lsof -p $PID | awk '{ if ($5=="REG" && $4!="mem" && $9)print $0 }' | grep -v "$WHICH" | grep -oP '\/.*'
fi
}
FILE="$(playing)"
echo "file: $FILE"
if [ "$FILE" ]; then
rm "$FILE" && echo "Removed '$FILE'"
fi
(2)设置权限允许其执行
chmod +x rmplaying.sh
(3)编辑或创建文件“~/.mplayer/input.conf”并添加以下行
Ctrl+d run "/path/to/rmplaying.sh"
就是这样。
要进行测试,请使用 mplayer 播放文件并按“Ctrl+d”。文件将通过“rm”命令删除,但媒体将继续播放。
如果您从终端窗口启动了 mplayer,则应该会看到消息“已删除‘/path/to/media/file.mp3’”。如果您没有使用终端启动它,请检查该文件是否已从其目录中删除。
*将 playing() 函数移至其自己的实用脚本,以便进一步定制
答案2
答案3
为了解决这个问题,我在文件中添加了以下行~/.mplayer/input.conf
:
DEL run "rm '${path}'"
这使得mplayer 中的键在mplayer 当前正在播放的文件的完整路径上delete
运行 shell 命令。rm
注意该${path}
部分被 mplayer 本身替代了${path}
:不是壳变量插值。
但不幸的是,mplayer 坚持使用 shell 来运行命令,这意味着精心设计的删除文件名可能会导致执行任意 shell 代码。欢迎提出避免这种情况的想法。
还要注意,单引号对于文件路径中的空格非常重要,但对于名称中带有单引号的文件,单引号会停止工作。
还要注意,这不需要 shell 脚本或摆弄lsof
,因此应该在任何 unix-y 操作系统上运行,并且可以与同时运行的多个 mplayer 实例一起工作。
确切的命令文档可以在 mplayer 的从属模式文档。
答案4
首先,你为什么不尝试看看?无论如何,从mplayer
自身删除可能是不可能的,媒体播放器为什么会有文件操作能力?这就像问你是否可以使用复制文件一样acroread
。
在播放文件时删除它应该不是问题。只要程序打开文件,文件就会被复制到 RAM 中,您可以毫无问题地从硬盘中删除文件(刚刚使用 mplayer 检查了这一点)。如果我没记错的话,Windows 不喜欢你这样做,但我从未在 Linux 中遇到过这种行为。