対象読者

  • Ubuntu等のデスクトップLinuxを利用している
  • MP3プレイヤーとしてSONYさんのMP3 Walkmanを愛用している

ということで、少なくとも僕は得をしますが、誰が得をするのかよく分からないTipsです。ワンライナーばっかりです。1行野郎最高!

あと、

  • xargsコマンド初心者~初級者ぐらいの方

にも、音楽とかソニー関係なく参考になると思われます。

動作確認

「NW-E026F」では、私の使用した限りでは問題なく動作することを確認しています。あくまでも公式の使い方から外れますので、自己責任でお願いします

まず、sonydb自体のコマンドを確認しましょう

1
2
3
4
5
6
7
8
9
10
$ sonydb 
detected device /media/WALKMAN
usage...
	songs [id]
	songsdel [id]
	songsadd [file]
	songschk [file]
	plist [id]
	plistdel [id]
	plistadd [file]

任意のアーティスト/アルバムの曲をまとめて消す

sonydbはインストール済み、PATHの通ったところにある前提。

1
sonydb songs | grep ${ARTIST_OR_ALBUM_NAME} | cut -d, -f1 | xargs -n1 -t sonydb songsdel

超UNIXっぽくて素敵ですね。

解説

前提として、sonydb songsdelはパラメータを一つしか取りません。なので、xargs -n1で「一つずつ」パラメータを送ってます。

grepやcutの解説は必要ないですよね……。

よく分からないときは、xargs-tオプションを加えると実際に発行されるコマンドが分かります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ /opt/sonydb/bin/sonydb songs | grep PANICSMILE | cut -d, -f1 | xargs -n1 -t /opt/sonydb/bin/sonydb songsdel
/opt/sonydb/bin/sonydb songsdel 0192 
Writing database files: OK
/opt/sonydb/bin/sonydb songsdel 0193 
Writing database files: OK
/opt/sonydb/bin/sonydb songsdel 0194 
Writing database files: OK
/opt/sonydb/bin/sonydb songsdel 0195 
Writing database files: OK
/opt/sonydb/bin/sonydb songsdel 0219 
Writing database files: OK
/opt/sonydb/bin/sonydb songsdel 0220 
Writing database files: OK
/opt/sonydb/bin/sonydb songsdel 0221 
Writing database files: OK
...

あるフォルダにある曲をまとめて転送

mp3のあるフォルダに入って、

1
find . -name "*.mp3" -print0 | xargs -n1 -t -0 sonydb songsadd

解説

ファイル一覧をxargsでひとつずつsonydb songsaddに流し込むだけです。のはずなんですが、多くの場合、曲名そのままファイル名にしたりしてますから、ファイル名には半角スペースが含まれてたりします。このままだと困るわけです。

find -print0で、各ファイルパスを、改行ではなく0文字(null文字)でつなげて出力してくれます。それを、xargs-0オプションで再度バラします。あとは一緒ですね。

まとめ

xargs すごく便利。あと普通の音楽クラスタはコマンドラインでmp3プレイヤーの中身を管理したりしない。

参考

開発者さんの解説ページにインストール方法、普通の使い方など、色々詳しいです。