명령줄을 사용하여 VLC에서 재생되는 미디어 제목을 가져오고 싶습니다. 현재 내가 가지고 있는 가장 가까운 명령은 이 명령입니다.
ps aux | grep vlc
출력은 다음과 같습니다
pc 27636 2.1 2.3 1261964 90028 ? Sl 21:46 0:23 /usr/bin/vlc --started-from-file /media/pc/Everything/TV shows/Discovery Channel - The History Of Hacking.avi
pc 28317 0.0 0.0 11748 2196 pts/0 S+ 22:05 0:00 grep --colour=auto vlc
답변1
나는 이것을 수행하는 훌륭하고 깨끗한 방법이 있다고 확신합니다. 아마도 D-bus를 통해서일 것입니다. 안타깝게도 그게 뭔지 모르겠어서 좀 더 해킹적인 방법이 있습니다. 이를 사용하여 lsof
프로세스를 실행하여 열린 파일을 인쇄할 수 있습니다. 관련 옵션은 다음과 같습니다( man lsof
).
-c c selects the listing of files for processes executing the
command that begins with the characters of c. Multiple commands
may be specified, using multiple -c options. They are joined in
a single ORed set before participating in AND option selection.
따라서 lsof -c vlc
이름은 으로 나열됩니다 vlc
. 그러나 여기에는 우리가 관심을 두지 않는 다양한 라이브러리 및 기타 항목을 포함하여 모든 종류의 항목이 나열됩니다. 출력의 네 번째 필드 lsof
(적어도 내 Arch에서는)는 파일의 파일 설명자(일반 파일의 경우)이고 그 뒤에는 파일이 열린 모드를 설명하는 문자가 옵니다( r
이 경우 읽기). 필드 5는 파일 형식이며 여기서는 REG
일반 형식을 원합니다. 이 모든 것을 종합하면 다음과 같은 결과를 얻을 수 있습니다( -w
경고가 표시되지 않음).
$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"'
vlc 16532 terdon 16r REG 8,19 131338 69731703 /path/to/foo.avi
파일 이름만 얻으려면 GNU를 사용할 수 있습니다 grep
.
$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"' | grep -o '/.*'
/path/to/foo.avi
파일 이름만 가져옵니다.
$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"' | grep -o '[^/]*$'
foo.avi
답변2
헤더(파일 메타데이터에 있음) 뒤에 있는지 아니면 파일 이름(명령줄에 있음) 뒤에 있는지 잘 모르겠습니다. ps 또는 pgrep은 헤더를 직접 가져오지 않지만 파일을 가져옵니다. 모든 vlc와 해당 명령줄을 실행할 수 있습니다.
pgrep -a vlc
그러면 이름에 vlc가 포함되어 있지만 플래그는 포함되지 않은 모든 프로세스가 검색되므로 이름이 지정된 바이너리 실행과 일치합니다.vlc를 사용한 프로그램하지만다른 프로그램 --flags --do-vlc
이제 명령줄에서 파일 이름을 추출하는 방법이 약간 까다롭습니다. sed를 통해 실행하고 싶을 수도 있지만 약간 불안정할 것이라고 생각합니다.
pgrep -a vlc | sed -r 's%^.*\/([^/.]+)%\1%g'
바이너리 이름에 vlc가 포함된 프로그램 목록이 표시되며 출력은 마지막 슬래시부터 점까지의 모든 내용입니다.
당신은 다음과 같은 것을 연주하기 시작합니다/홈/영화/dr. 마일그렇다면 당신은 운이 좋지 않습니다.
답변3
mpris 인터페이스 사양을 보면 d-bus를 사용할 수 있습니다.여기
qdbus 및 mpris 인터페이스를 사용하여:
qdbus org.mpris.MediaPlayer2.vlc \
(VLC는교체됨다른 미디어 플레이어에서도 작동합니다. ) 그런 다음 여기에서 메타데이터를 추출합니다.
/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata \
마지막으로 grep을 사용하고 불필요한 데이터를 제거하면 헤더를 볼 수 있습니다.
| grep "xesam:title:" | cut -c 14-