現在mplayer
で再生されているMP3ファイルを削除したいと思います。可能であれば、mplayer
コマンドを使用して実行したいと思います。そのため、mplayer
を終了してこのファイルをrm
で削除したり、別のターミナルを開いてそこでファイルを削除したりする必要はありません。
はい、可能で簡単です。以下の修正バージョンを使用して、メディアコレクションをキュレート/プルーニングします。
(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を起動した場合は、「Removed '/ path/to/media/file.mp3'」というメッセージが表示されます。ターミナルを使用して起動しなかった場合は、ファイルがディレクトリから削除されたことを確認してください。
*さらにカスタマイズするために、playing()関数を独自のユーティリティスクリプトに移動します
ファイルを削除することはできません。ユーザーができる唯一のことは、ディレクトリからファイル名を削除する unlink(2)
(たとえば、 rm(1)
を使用)を呼び出すことです。その結果、ハードリンクカウンターがデクリメントされます。ハードリンクカウンターがゼロに達し、このファイルのファイルハンドルを開いているアプリケーションがない場合にのみ、オペレーティングシステムはファイルを削除します。
mplayer
でファイルを再生するため、開いているファイルハンドルがあり、ファイルを削除することはできません。 unlink(2)
システムコールは、それでも成功するはずです。実際には、これはファイルで rm(1)
を呼び出すことができることを意味しますが、mplayer
を終了するまでスペースを解放することを期待しないでください。
これを解決するために、ファイル~/.mplayer/input.conf
に次の行を追加しました。
DEL run "rm '${path}'"
これにより、mplayerのdelete
キーは、mplayerが現在再生しているファイルの完全なパスでシェルコマンドrm
を実行します。
${path}
の部分はmplayer自体に置き換えられていることに注意してください。${path}
はnotシェル変数の補間です。
ただし、残念ながら、mplayerがコマンドの実行にシェルの使用を主張しているという事実は、慎重に作成されたファイル名を削除すると、任意のシェルコードが実行される可能性があることを意味します。それを避けるためのアイデアは大歓迎です。
また、ファイルのパスにスペースを入れてこれを機能させるには一重引用符が重要ですが、名前に一重引用符が含まれているファイルでは機能しなくなります。
また、これにはシェルスクリプトやlsof
をいじる必要がないため、UNIXオペレーティングシステムで実行し、同時に実行されているmplayerの複数のインスタンスで動作する必要があることにも注意してください。
正確なコマンドのドキュメントは、mplayerの スレーブモードのドキュメント にあります。
まず第一に、あなたはただtryそれを見てみませんか?とにかく、mplayer
自体から削除することはおそらく不可能ですが、なぜメディアプレーヤーにファイル操作機能があるのでしょうか。これは、acroread
を使用してファイルをコピーできるかどうかを尋ねるようなものです。
再生中にファイルを削除しても問題はありません。ファイルはプログラムが開くとすぐにRAMにコピーされ、問題なくハードディスクからファイルを削除できます(mplayerを使用してこれをチェックしただけです)。Windowsはあなたを好きではありません。私が正しく覚えていればそれをしますが、Linuxでこの動作に遭遇したことはありません。
lkchoiとndimのソリューションは私にはうまくいきませんでした。
そこで、「Cesar」と呼ばれるシステムを作成します。曲が悪い場合は削除し、別のフォルダーに移動するのが良い場合は削除します。
これは、オーディオを選択するときに役立ちます。たとえば、重要な録音であるWhatAppバックアップですか。
私も使用した巨大なヘアメタルパッケージで曲をフィルタリングするのは簡単です。
mplayer */*/*3 | sed "s@Playing \(.*\).\$@\nrm \"\1\"\nmv \"\1\" ../saved\n@"
mplayerは「再生中」+曲名+ファイル拡張子+ダムドットをエコーします。それらを削除し、削除または移動するために必要なステートメントをマウントしました。
予想されるすべての情報がエコーされますが、代わりにPlaying ...と表示されます。
rm "Absolute HairMetalVol。56-111/ Absolute HairMetalVol。100/ 06Leatherwolf-The Calling.mp3" mv "Absolute HairMetalVol。56-111/ Absolute HairMetalVol。100/ 06Leatherwolf -Calling.mp3 "../saved
.。
マウスを2回クリックして貼り付けてから、Enterキーを押すのは面倒です。しかし、他のソリューションは機能しなくなり、セキュリティの問題もいくつかあります。
たぶん、\ nを\ rに変更する必要があります。結果:
mplayer */*/*3 | sed "s@Playing \(.*\).\$@\rrm \"\1\"\rmv \"\1\" ../saved\n@"