jc と jq の組み合わせで、ファイル名のクォートが便利
ファイル名にスペースが入る
次のように、ファイル名にスペースが入って、コマンドで処理するときにIFS(区切り)として解釈されちゃってとっても邪魔。
takuya@:$ls -l *5576* -rwxrwxrwx 1 takuya takuya 2733101 Oct 26 2021 'IMG_5576 (2).JPG' -rwxrwxrwx 1 takuya takuya 689 Oct 26 2021 'IMG_5576 (3).AAE' -rwxrwxrwx 1 takuya takuya 689 Oct 26 2021 IMG_5576.AAE -rwxrwxrwx 1 takuya takuya 2964682 Oct 26 2021 IMG_5576.JPG -rwxrwxrwx 1 takuya takuya 2439727 Oct 26 2021 'IMG_E5576 (2).JPG' -rwxrwxrwx 1 takuya takuya 2679346 Oct 26 2021 IMG_E5576.JPG
jc コマンドと jq コマンドでサクッと
これで、確実にクォートがされる。
takuya@:$ ls -l *5576* | jc --ls | jq .[].filename "IMG_5576 (2).JPG" "IMG_5576 (3).AAE" "IMG_5576.AAE" "IMG_5576.JPG" "IMG_E5576 (2).JPG" "IMG_E5576.JPG"
jc コマンドで、JSONにできると、処理が格段に楽ですね。
bashでぶん回すときに、楽ですね。インストールは面倒だけど。
エスケープ処理がめんどくさくて、python/ruby のexec()スクリプト作ることも多いが、jc | jq
で少し楽ができそう
関連資料
jc コマンドの例 - コマンドの結果をJSONの配列やオブジェクトにする。 - それマグで!
prinft でクォートする例 - シェルでファイル名をエスケープにしてクォート地獄を解決する。 - それマグで!