オススメ

bash便利帳 ブレース展開、

自分に便利なワンライナーの雛形

ダミーテキストを作ったりする場合

同じ内容のテキストファイルを1000行作る。for文。
for i in {1..1000}  ; do echo こんにちは。>>こんにちは2.txt ;done ↲

{}内がブレース展開される。結果1000回こんにちはする。
#zshでは、単一コマンドの場合、do/doneを省略できる。
for i in {1..1000}  ; echo こんにちは。>>こんにちは2.txt ↲

#複数の動画ファイルの幅を調べる
mediainfo *.mp4 | grep Width |cat width.txt | perl -pe 's/^.*\: //,s/(\d) (\d\d\d)/$1$2/' | grep -oP '\d{3,4}' | sort | uniq ↲
mediainfo では4桁の場合、空白が入る「1_920」ので、それ[ ]を削除しています。


#再生する動画ファイルの横幅を調べて、変数に格納する。シェルスクリプト内で使うと便利かも。
PIXELS=`mediainfo "$1" | grep Width |perl -pe 's/(\d) (\d\d\d)/$1$2/' | grep -oP '\d{3,4}'`
echo "Width $PIXELS pixels."

たとえば昔のビデオカメラ映像は小さいので、思い切り拡大して再生する。画質がよくなるわけではありませんけれど、幅に応じて拡大サイズを指定すると便利です。

case "$PIXELS" in

        320)
        mpv --window-scale=6.0 "$1"
        ;;
        1920 )
        mpv "$1"
        ;;
        *)
        mpv --window-scale=1.0 "$1"
        ;;
esac

--window-scale=6.0 は、mpvのオプションです。キーボードでもできます。マウスでもできますが、ちょっと確認するだけなら操作は少ないほうがいいですよね。

大型4k所持者も少しづつ増えてきたので、 FHDは、
mpv --window-scale=1.5 "$1"


にしておいて、クリックで全画面に移行させるというのもいいかもしれません。
#ソースになぜか全角がまじっていたら、半角に直してください。

Sは、suffixのS ものぐさzsh: 実行コマンドを入力せずにファイル名単独でアプリと共に実行する。

Zshで可能で、Bashでできないシリーズ::かなりものぐさな人向け

拡張子判別実行

ファイル名だけ入力すると、音楽プレイヤーやmpvが起動すると楽といえば楽かもしれないという設定。
言い換えると、拡張子判別実行ですね。 どうなんでしょう?!
設定してから何年もたちますが当方の利用頻度は低いですね。bashが基本なので。

% file.flac (enter)

とすると、mpvが起動すると楽といえば楽かもしれないという設定。

% *.mkv

以下の設定をするとmkv拡張子ファイルがmpvに割り当てているため自動実行されます。便利といえば便利か。

mpv --hwdec=auto --  *.mkv と等価。



その1 触ってみて採用:雛形 

#極端な話、全拡張子に xdg-open にしておくとGUIデフォルトなので楽かも。

# 引数込で指定もできた。コマンドの妥当性ではなくてどういう書式なのか確かめたということです。

alias -s  mkv="mpv --hwdec=auto -- "
alias -s  mp4="mpv --profile=opengl-hq --hwdec=vdpau -- "
alias -s m2ts="mpv
--hwdec=vaapi -- "
alias -s   ts="mpv --fps=60 -- "
alias -s  wmv=mpv
alias -s  avi=xdg-open

alias -s flac=mpv
alias -s  wav=mpv
alias -s  mp3=mpv
alias -s  ogg=mpv
alias -s  tta=mpv
alias -s  ape=mpv
alias -s  tak=mpv

alias -s  txt=atom
alias -s conf=atom
alias -s  rc=code

#alias -s pl=code 

#実行権限付与したかもしれないテキストは分岐させるか、関連づけないほうがいいですよね。たぶん。
#alias -s plx=code
#alias -s sh=code
#alias -s bash=code


以下bashのお話

bashではこの芸当はできませんので、そこがあれ。bash ならふつうにグロブ展開させるのは同じですが、「mpv 」と入力する必要がありますよね。スペース含めると4文字打鍵。先頭に戻る必要がありますし、5文字打鍵か。

$ mpv *.mkv

mpvで起動する場合は、bash内蔵bindで モデファイラー-m に次のような割当を行っています。これはこれで便利。意味は、カーソル位置がどこにあろうが先頭に移動してmpv以下の文字列で実行する、です。マクロですね。

    bind '"\ea":beginning-of-line' #alt-a も行頭に戻る。この妥協が一番よさそう。

    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \C-m"' #alt-m
余談:たぶんこう書いても同じです。
    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \n"' #alt-m
    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \C-j"' #alt-m

かなり長い文字列がOKみたいです。 mpvは今profile選択をメインにしていますけれど、全部1キー操作に置き換えることもできそう。効率的かはどうかとして。

余談すぎる余談。

ファンクションキーに割りあてる場合。完全1キー。こういう雛形を作成したので、少しづつ何かを割り当てていっています。覚えきれないけれど。笑) .inputrc よりこのほうが自分には調整しやすいかもです。zshのbindkey を並列して眺めつつできるだけ共通化しようと考えているんです。

#f5 f6 f7 f8 雛形
    bind '"\e[15~":"F5"' #F5 にキー割り当て
    bind '"\e[17~":"F6"' #F6 にキー割り当て
    bind '"\e[18~":"F7"' #F7 にキー割り当て
    bind '"\e[19~":"F8"' #F8 にキー割り当て

#接尾辞エイリアス suffixの -s
#拡張子判別実行
#極端な話、全拡張子に xdg-open にしておくとGUIデフォルトなので楽かも。

以下のその1を .zshrc  末尾にでもぺったんして、試してみてください。その2は機械的にPerl で作成しただけなので、まったく触っていませんので、編集しながらお試しください。

その2 ががーと生成してみた。すべて未検証

# 拡張子自動判別実行 てきとー::右側にタブいれるとエラーになる。

alias -s  Z=xdg-open
alias -s  gz=xdg-open
alias -s  bz2="bzip2 -cd %C|"
alias -s  deb=xdg-open
alias -s  rpm="rpm2cpio %C|cpio -tv" -f "%a %x %u %g %s %m %d %y %f"
alias -s  7z=xdg-open
alias -s  rar=xdg-open
alias -s  jpg=xviewer
alias -s  JPG=xviewer
alias -s  jpeg=xviewer
alias -s  png=xviewer
alias -s  PNG=xviewer
alias -s  gif=xviewer
alias -s  GIF=xviewer
alias -s  bmp=xviewer
alias -s  BMP=xviewer
alias -s  mpg=mpv
alias -s  wmv=mpv
alias -s  WMV=mpv
alias -s  avi=mpv
alias -s  mp4=mpv
alias -s  m4v=mpv
alias -s  mkv=mpv
alias -s  mov=mpv
alias -s  mpeg=mpv
alias -s  ts=mpv
alias -s  3gp=mpv
alias -s  mp3=mpv
alias -s  m4a=mpv
alias -s  ogg=mpv
alias -s  wma=mpv
alias -s  iso=cvlc
alias -s  flac=mpv
alias -s  wav=mpv
alias -s  tak="paplay -v"
alias -s  tta="paplay -v"
alias -s  ape="paplay -v"
alias -s  cue=audacious
 

シェルスクリプト1行便利帳(うつけ者用)

1行「定型文」 =1行制御構造の活用


横着かつ勉強好きでもないので、1行で押し込めるマイ「定型文」をけっこう使います。エディターの行編集で便利だからですが。1行なので書き足すだけ。複数行は使いにくい。
スクリプトのエレガンス度合いの問題ではなくて、簡便にしたいだけですね。不要になれば行削除できるわけで。
プログラマーではない自分にはあっています。マニュアルを読まない独学素人なので、根本的に何かが違うのかもしれません。ただきちんと間に合っているので悪くはないと思います。


ホーム~でうっかり実行しないようにする「オレンジ行」。ホームには.bashrcが必ずあるので。

#!/bin/bash
#@ Rename(J).pm によるリネーム
#~なら何もしないで終了。
if ls -a | grep -E '.bashrc' ; then exit ; fi

renameall -v
zenity --info \
--text="Rename(J).pm によるリネームが終わりました。\n対象:\n$PWD"

exit

ZiSH

オレンジ行は、.bashrc があれば何もしないで終わる、です。pwdでみてもいいんですがこれのほうが自分にはあってる。もっとかんたんに書けるのなら乗り換えたいです。ファイル存在を確認するより、このgrep を使うパターンひとつのみ覚えると応用がかなりきいてすんごく捗るのでこうしています。(プロの方からはその不真面目な発想を笑われそうですが) もっとも、.ICEauthority の存在をみたほうがいいのかも――とこだわっても仕方がないですね、たぶん。

ついでに、何をしているかを説明すると、

0)ホームにいるなら(.bashrcがあれば)何もしないで終わる。
1)ファイルリネームルールを悉皆適用する(renameall自作コマンド)
2)処理が終わったよダイアログをzenityで出す。マウスクリックで終わり。数分かかる場合があるので実行したことを忘れていたりする(笑)。

このスクリプトをmate/cinnamon で右クリックメニュー実行にしています。ターミナルでは叩きません。 マウス操作では特にうっかり実行してしまうので。あはは。

オレンジ行は単純。grepの返り値でマッチしたらexit。すんごくかんたんな分岐ですが自分のスクリプト中では活用度が高いです。

右クリックメニュー作成について 「右クリックメニューの拡張 scripts nemo caja」

利用中シェルに応じてコマンドを使い分ける。bash or zsh

zshとbashを同時並べつつカスタマイズしている最中に便利なコマンドであり、その雛形です。
  • zsh/bashでプロンプトの形や色などで変えていても間違えることがある。
  • キーバインドの統一カスタマイズ作業をしている最中はとりわけ混乱する。
  • 実はかなり間違えている。年に10回以上は:笑)
ので

以下をぺったんして、(当方はシェル関数はbash/zsh 共通のrcファイルにしています。共通で動かない関数は原則使いません。メンテがめんどうだからです。意識は高くないです。~/.bash_functions.rc にzsh/bash共通利用関数を書いています)
以下の実使用中の雛形では、bashrc または zshrc と打てば、rcファイルへの変更が反映されます。shrc というコマンド名もないはずなので、そういうので統一してもいいでしょう。

余談ですが、このパターンを利用して ~.keybindings というキーバインディング設定rcを.zshrc/.bashrcから読み込ませています。
#bash単独ならもちろん不要。
#@ シェル関数定義
#

    function bashrc () {
        #bashrc/zshrc で rc をシェルに応じて再読込。カレントシェル判別。
        CURRENT_SHELL=`set | grep -aoP '^(B|Z)A?SH_VERSION'`

        case $CURRENT_SHELL in
            BASH_VERSION )
              source ~/.bashrc && echo 更新完了 source ~/.bashrc ;;
            ZSH_VERSION  )
              source ~/.zshrc  && echo 更新完了 source ~/.zshrc  ;;
            *)
                echo not zsh , not bash  ;;
        esac
    }
    alias zshrc=bashrc
#zshrc としても、bashrcとしても、同じ。

# BASH_VERSION='4.3.46(1)-release'
# ZSH_VERSION=5.1.1
# csh / tcsh / fish (^fish_)などは使いませんのでこれで充足しています。

#~/.bashrc .zshrc

 if [ -f ~/.keybindings ];         then  .  ~/.keybindings    ; fi

#~/.keybindings

CURRENT_SHELL=`set | grep -aoP '^(B|Z)A?SH_VERSION'`
case $CURRENT_SHELL in

ZSH_VERSION  ) 
#ZSHはここから定義。
    bindkey "\e[3;2~" kill-word  #bash/zsh 共通
    bindkey '^x^e' edit-command-line #FC と等価 bash 標準アサインと統一した。
      ;;

BASH_VERSION )  #BASHはここから定義。

#■ ALT-シリーズ
    bind '"\ea":beginning-of-line' #alt-a も行頭に戻る。この妥協が一番よさそう

;;
esac
#.inputrc に設定するよりこっちのほうが自分は楽。

青色の行でシェル名が変数に格納できますので、bashならほげ、zshなら、ふげというシンプルなcase分岐ができています。(カレントシェルに応じて)同じようなことをしたいけれどコマンド名が微妙に違うってケースは、シェル内蔵コマンド bind(bash)/bindkey(zsh)などでもありますよね。

zsh/bashに特化していますので、
grep で、a=アスキー限定、o=一致部分切り出し、P= Perl互換正規表現
としています。これで、ZSH_VERSION という文字列がCURRENT_SHEL格納できるわけです。
~/binなどにはこの分岐を使った他のツールもおいています。

余談。grep の -Pオプションは、なんだかんだいっても便利です。Perl互換の正規表現だけ覚えていればいいのでGNUツールのみしか使わないって人にはうってつけかも。職業的なプログラマー、SEなどであれば様々なUnix環境に対応したいと思うのでしょうが、自分は関係ないので。そういえば、このオプションでなんとかなっているので、pcregrep/pcre2grep は使いませんね。以前はエクスペリメンタルだった気がしますが、今はカジュアルに使っていいのではないかと。


zshは素晴らしすぎ便利すぎです。だから人間があほになりそう!!とbashを使うんですが、zshもいいよな、と。10年位こんなことを繰り返しています。あはは。もっとインテリジェント、エレガントな解法があれば乗り換えますので、ご教授ください。

#~/.profile mint18.1の .profile(ログインシェルで読み込まれる?!)では次のように書かれていました。さっき気がつきました。


# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi


nemo, nautilus などでサムネイルが表示されない場合

20.04LTS manjaro Cinnamon 及び Linux Mint では次の方法で自分の場合、治療することができました。次の記事をご覧ください。

Linux Mint thumbnail flac mp3 hevc等サムネイルが表示されない問題を一気に解決する。2020最新



https://poor-user.blogspot.com/search/label/thumbnail


------------

とりあえず、以下を一旦削除して入れ直したら、きれいに治った。(という現象)です。 ubuntu 16.04/mint 18.1 Cinnamon

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
sudo apt install ffmpegthumbnailer ↲