TIL

Today I Learned. 知ったこと、学んだことを書いていく

ディレクトリパスをエイリアスで登録して簡単に移動できるgotoコマンドを使ってみる

ディレクトリのパスをエイリアスとして登録して簡単に移動できるgotoっていうコマンドを見つけたから使い方のメモ

github.com

インストール

$ mkdir -p ~/.bash
$ wget https://raw.githubusercontent.com/iridakos/goto/master/goto.sh -O ~/.bash/goto.sh

.bashrcに以下を追記する

source ~/.bash/goto.sh

読み込んで

$ source ~/.bashrc

使ってみる

$ goto

usage: goto [<option>] <alias> [<directory>]

default usage:
  goto <alias> - changes to the directory registered for the given alias

  OPTIONS:
    -r, --register: registers an alias
      goto -r|--register <alias> <directory>
    -u, --unregister: unregisters an alias
      goto -u|--unregister <alias>
    -p, --push: pushes the current directory onto the stack, then performs goto
      goto -p|--push <alias>
    -o, --pop: pops the top directory from the stack, then changes to that directory
      goto -o|--pop
    -l, --list: lists aliases
      goto -l|--list
    -x, --expand: expands an alias
      goto -x|--expand <alias>
    -c, --cleanup: cleans up non existent directory aliases
      goto -c|--cleanup
    -h, --help: prints this help
      goto -h|--help
    -v, --version: displays the version of the goto script
      goto -v|--version

使い方

移動

goto <alias>

また、Tabで補完できる

エイリアス登録(-r)

-r --register

goto -r <alias> <directory>

例)~/src/pythonpythonとしてエイリアス登録

$ goto -r python ~/src/python

エイリアス登録を解除(-u)

-u --unregisters

goto -u <alias>

例)エイリアスpythonの登録を解除

$ goto -u python

カレントディレクトリをスタックにpushし、goto(-p)

-p --push

goto -p <alias>

カレントディレクトリに戻ってきたいときとか使えそう

例)カレントディレクトリをスタックに追加してから、pythonに移動

$ pwd
/Users/tamago324/dotfiles/

$ goto -p python

スタックからpopし、移動(-o)

-o --pop

goto -o

-pでpushされたスタックからpopし、移動

例)/Users/tamago324/dotfiles/goto -p xxxとしていた場合

$ goto -o

$ pwd
/Users/tamago324/dotfiles/

スタックに追加していたため、戻れる

エイリアスの一覧(-l)

-l --list

goto -l

エイリアスの完全パスを取得(-x)

-x --expand

goto -x <alias>

存在しないパスのエイリアスを削除(-c)

-c --cleanup

goto -c

なくなったディレクトリパスのエイリアスを削除してくれる

参考文献

指定フォルダ以下のファイルをコピーする - Python

指定のフォルダの下にあるファイルをコピー

再帰的に見ていく

再帰的にファイルを見るのにpathlib.Path.glob()を使い、ファイルをコピーするのにshutil.copy()を使う

例)C:\sample以下のファイルで、ファイル名に"a"が含まれているファイルをカレントディレクトリにコピーする

>>> from pathlib import Path
>>> p = Path(r"C:\sample")
WindowsPath('C:/sample')
>>> for f in p.glob("**/*a*):
...     shutil.copy(f.absolute(), "./")

参考文献

nonlocal ネストした関数から変数にアクセスする - Python

ネストした関数で、上で定義された変数を使うにはnonlocalキーワードを使う

def main():
    a = 1

    def child():
        nonlocal a
        a += 1
        print(a)

    print(a)
    child()
    print(a)

main()

出力結果

1
2
2

ネストした関数から、アクセスできた!!

これは、メモ化のための実装方法らしい。クロージャというやつ
メモ化ってどっかで聞いたことある。
たしか、同じ引数だったら、前回の結果をそのまま返すやつだっけ

クロージャについてはこんどちゃんとやる。こんど。うん。

参考文献

【Windows】フォルダをエクスプローラで開く - Python

subprocessモジュールのcallを使う

import subprocess
subprocess.call(f'explorer "{開くフォルダのパス}"')

参考文献

os.path.expanduser関数 - Python

カレントユーザのホームディレクトリのパスを取得することができる

>>> os.path.expanduser('~/src/python/')
'/Users/tamago324/src/python/'

使えるときあるのかな?

参考文献

【IFNULL関数】 AがNULLだったら、B。AがNULLじゃなかったら、Aを返す関数 - MySQL

便利なのを知ったからメモ

もし、第1パラメータがNULLだったら、第2パラメータを返し、
第1パラメータがNULLじゃなかったら、第2パラメータを返してくれる便利なやつ

第1パラメータがNULLではない時

SELECT IFNULL('AAA', 'BBB') FROM DUAL

結果

AAA

第1パラメータが返ってくる

第1パラメータがNULLの時

SELECT IFNULL(NULL, 'BBB') FROM DUAL

結果

BBB

第2パラメータが返ってくる

Pythonでのorみたいな?

>>> 'hoge' or 'fuga'
'hoge'

>>> None or 'fuga'
'fuga'

参考文献