xargs の使い方メモ
たまにしか使わないで済んでいるのでいつも使い方を忘れる。
基本
コマンドの出力をパイプで渡すと、各行をコマンドの最後の引数として実行する。
ls | xargs md5 -q
これは次のように展開されたものと同じ。
md5 -q foo md5 -q bar md5 -q baz ...
ただしファイル名にスペースを含んでいると上記の方法ではうまくいかない。この場合、次の節で説明するプレースホルダを使用する。
プレースホルダ
xargs では -I
オプションで引数を展開する場所を指定することができる。-I '{}'
のように指定すると、{}
の場所に引数が展開される。
ls | xargs -I '{}' md5 -q '{}'
これでスペースを含むファイル名もうまく展開される。
md5 -q 'foo' md5 -q 'bar' md5 -q 'foo bar' ...
処理系によっては小文字の -i
オプションで -I '{}'
と同等の動作になるので alias を指定しておくと便利かもしれない。
alias xargs-i='xargs -I "{}"'
拡張子の変更
xargs を使って拡張子を一括置換するにはプレースホルダに加え、 sed を組み合わせるとよい。
find . -name '*.txt' | sed -e 's/[.]txt$//' | xargs -I '{}' mv '{}.txt' '{}.md'
応用例として、 FFmpeg で動画から音声トラックのみ抽出するコマンドを挙げる。
find . -name '*.mp4' | sed -e 's/[.]mp4$//' | xargs -I '{}' ffmpeg -i '{}.mp4' -c:a copy '{}.m4a'
Windows のスクリーンショットを一括で JPEG に変換してリネーム
PowerShell は使わず、WSL の bash や zsh などから使用する。ImageMagick (convert コマンド) がインストールされているものとする。
ls スクリ*.png | \ sed -e 's/スクリーンショット (//' -e 's/)[.]png//' | \ xargs -I '{}' convert 'スクリーンショット ({}).png' 'image-{}.jpg'
一部を切り抜きたい場合はその座標を指定して
# -crop (width)x(height)+(left)+(top) ls スクリ*.png | \ sed -e 's/スクリーンショット (//' -e 's/)[.]png//' | \ xargs -I '{}' convert 'スクリーンショット ({}).png' -crop 1140x641+601+199 'image-{}.jpg'
FFmpeg でオーディオファイルの音量を調整する
Windows 10 に付属する標準の音楽プレイヤーは曲ごとに再生時の音量を設定することができないようなので、 FFmpeg を使って MP3 や AAC の音量を調整した。
ここで使用した FFmpeg のバージョンは N-93565-g0ad0533e91 (2019/2)。
ffmpeg -i INPUT -c:v copy -filter:a "volume=-6dB" OUTPUT
オプションの詳細は次の通り。
- -i INPUT …… 入力ファイル
- -c:v copy …… 映像パートはコピーする
- -filter:a "volume=-6dB" …… 音声にフィルタを適用する
- 音量は -6dB のようにも調整できるし、 0.5 など [0, 1] の値を設定することもできる。デシベル値を設定する場合は B が大文字でないといけないことに注意
- OUTPUT …… 出力ファイル
macOS Mojave をクリーンインストールした
Catalina から Mojave にダウングレードするため macOS Mojave をクリーンインストールした。
この Mac にプリインストールされていた OS は Mojave だったので、Mac の起動直後に shift + option + command + R キーを押し、プリインストールされていたバージョンに最も近い OS をインストールした。OS のインストール自体は 1 時間足らずで完了。
データの復元は Time Machine バックアップで難なくできた。400 GB ほどのデータで 5 時間ほどかかった。
Homebrew を macOS Mojave にインストール
Homebrew のサイトに記述されている次のコマンドを実行すると、インストールされるファイルやディレクトリの一覧が表示される。
% ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ==> This script will install: /usr/local/bin/brew /usr/local/share/doc/homebrew /usr/local/share/man/man1/brew.1 /usr/local/share/zsh/site-functions/_brew /usr/local/etc/bash_completion.d/brew /usr/local/Homebrew ==> The following new directories will be created: /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Homebrew /usr/local/Frameworks ==> The Xcode Command Line Tools will be installed.
Homebrew でインストールしたパッケージ
brew install rbenv ruby-build readline brew install ffmpeg brew install imagemagick brew install dnsmasq brew install unar
MuseScore プラグイン API
サンプル
Score
プロパティ/メソッド | 説明 |
---|---|
newCursor() : Cursor | |
nstaves : Number | 譜表の数 |
Cursor
プロパティ/メソッド | 説明 |
---|---|
staffIdx : Number | 譜表のインデックスを参照または設定する |
voice : Number | 声部のインデックスを参照または設定する [0, 4) |
segment : ? | |
element : Element | カーソル位置の要素を取得する |
rewind (position : Number) : void | カーソル位置を指定の場所に巻き戻す |
next () : void | カーソルを次の位置に進める |
Element
プロパティ/メソッド | 説明 |
---|---|
type : ElementType | 要素の型を取得する |
notes : Note[] | コードに含まれる音符のリスト。低い順 |
ElementType
値 | 説明 |
---|---|
Element.CHORD | コード(音符) |
Element.REST | 休符 |
Note
プロパティ/メソッド | 説明 |
---|---|
type : Number | |
name : String | |
parent : Object | |
selected : Boolean | |
visible : Boolean | |
small : Boolean | |
offsetX : Number | |
offsetY : Number | |
z : Number | |
lineType : ? | |
line : Number | |
direction : ? | |
velocity : Number | ベロシティを参照もしくは設定 |
veloOffset : Number | 相対ベロシティを参照もしくは設定 |
ブラウザ版 YouTube プレイヤーの表示を改善する
操作ボタン
.ypt-chrome-bottom
プログレスバー、再生、ボリューム、設定等のボタンがある部分。次のようにして動画の外に持っていける。
#info { margin-top: 40px !important; } .html5-video-player { overflow: visible; z-index: 100; } .ytp-chrome-bottom { z-index: 999; bottom: auto; top: 100%; opacity: 1 !important; background: #444; } .ytp-gradient-bottom { display: none; }
動画上に出てくる広告
画面下に持っていく。
.ytp-ad-overlay-slot { position: fixed !important; bottom: 0 !important; top: auto; }