ひさびさの小ネタ集
ひさびさに小ネタをいくつか投下します。
【目次】
- 特定ディレクトリー配下に存在するファイルの拡張子をすべて抜き出す
- find コマンドで特定の名前のディレクトリー以下には降りないようにする
- チェックボックスやチェックマークを Textile 記法で使う
- PowerShell で GNU find
- RealForce 87UB 静音モデルを Windows 7 で使う
特定ディレクトリー配下に存在するファイルの拡張子をすべて抜き出す
「あるディレクトリー配下に存在するファイルの拡張子をすべて抜き出したい」
そういうことってありませんか?
ファイル数が数千を超えると、目視では辛くなってきますよね。
そこで。
まずはお馴染み、find でディレクトリーのみ抜き出す方法
- 特定ディレクトリー配下のディレクトリーのみ抜き出す
$ find . -type d
続いて、あるファイルパスから拡張子のみ抜き出す方法
- 拡張子のみ抜き出す 方法その一
$ file_path='/tmp/foo/bar/aaa.txt' $ file_extension="${file_path##*.}" $ echo "${file_extension}" txt
- 拡張子のみ抜き出す 方法その二
$ file_path='/tmp/foo/bar/aaa.txt' echo "${file_path}" | sed 's/^.*\.\([^\.]*\)$/\1/'
以上を組み合わせて、特定ディレクトリー配下に存在するファイルの拡張子をすべて抜き出すシェルスクリプトを書きます。
第一引数に、調べたいディレクトリーのパスを指定してください。
「方法その一」か「方法その二」をコメントアウトして実行してください。
- 特定ディレクトリー配下に存在するファイルの拡張子を抜き出しリスト化
#!/bin/bash set -ue echo -n '' > /tmp/tmp.extensions.list if [[ ${#} -ne 1 ]]; then echo 'Usage:' echo '$ bash listing_all_file_extensions.sh /path/to/directory' else while read directory; do # 方法その一 while read file_path; do file_extension="${file_path##*.}" # 拡張子がないファイルはフルパスが返ってくるのでリストには載せない。 echo "${file_extension}" | grep -v '^/' >> /tmp/tmp.extensions.list done < <(find "${directory}" -type f) # 方法その二 # 拡張子がないファイルはフルパスが返ってくるのでリストには載せない。 # find "${directory}" -type f | sed 's/^.*\.\([^\.]*\)$/\1/' | grep -v '^/' >> /tmp/extensions.list done < <(find "${1}" -type d) fi sort /tmp/tmp.extensions.list | uniq > /tmp/extensions.list exit 0
find コマンドで特定の名前のディレクトリー以下には降りないようにする
find コマンドで検索をかけるとき、あるディレクトリー配下は検索したくないという場合があります。
これを実現するのが -prune オプションです。
僕は最初、使い方が分からなかったので、備忘録としてこのメモを残しておきます。
今回説明する環境のディレクトリー構成
- /tmp/foo/bar/111/222/333
- /tmp/foo/bar/111/aaa
- /tmp/foo/bar/111/bbb
- /tmp/foo/bar/111/222/aaa
- /tmp/foo/bar/111/222/bbb
- /tmp/foo/bar/111/222/333/aaa
- /tmp/foo/bar/111/222/333/bbb
特定ディレクトリー以下を検索しない -prune オプション
/tmp/foo/bar/111/222 以下のディレクトリーを検索対象から外す場合は以下のようにする。
- ファイル名 aaa, bbb のものを検索
$ cd /tmp $ find ./foo/bar -type d -name '222' -prune -o -name 'aaa' -o -name 'bbb' ./foo/bar/111/aaa ./foo/bar/111/bbb ./foo/bar/111/222 # <- 222 ディレクトリーも表示されてしまう。
- ファイル名 aaa, bbb のもの「のみ」を検索
$ cd /tmp $ find ./foo/bar -type d -name '222' -prune -o -type f -name 'aaa' -print -o -type f -name 'bbb' -print ./foo/bar/111/aaa ./foo/bar/111/bbb
なお、find コマンドのオプションは暗黙の -and が省略されています。厳密に書くと以下のようになります。
$ find ./foo/bar -type d -and -name '222' -prune -o -type f -and -name 'aaa' -print -o -type f -and -name 'bbb' -print
チェックボックスやチェックマークを Textile 記法で使う
ずばり以下のように書くだけ。
(Textile 記法は直接 HTML コードを書くことができる)
マークの種類 | マーク表記 | HTML Decimal |
---|---|---|
チェックボックス (チェックなし) | ☐ | ☐ |
チェックボックス (チェックあり) | ☑ | ☑ |
チェックマーク | ✓ | ✓ |
太いチェックマーク | ✔ | ✔ |
例
h2. Todo --- ☐ やること 1 ☐ やること 2 ☐ やること 3
参考
Tick symbol in HTML/XHTML - Stack Overflow http://stackoverflow.com/questions/658044/tick-symbol-in-html-xhtml
? (0x2610 in Unicode hexadecimal [HTML decimal: ☐]): an empty (unchecked) checkbox ? (0x2611 [HTML decimal: ☑]): the checked version of the previous checkbox ? (0x2713 [HTML decimal: ✓]) ? (0x2714 [HTML decimal: ✔])
PowerShell で GNU find
GNU の $ find -name foo っぽいことを PowerShell でやる。
ls -r | where { $_.Name -match "foo" }
RealForce 87UB 静音モデルを Windows 7 で使う
Windows 7 Professional 日本語版にて US キーボードを使うために行った設定のメモ。
- 87 キーのキーボードを使用したい(RealForce 87UB)。
- 右 Alt を半角/全角キーとして使いたい。
「AX キーボード用ドライバー」いうものを使うと、サクッとこれらの条件を満たすことができた。
レジストリーを変更して US キーボードレイアウトに変更する。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\servicec\i8042prt\Parameters
名前 | 種類 | データ |
---|---|---|
LayerDriver JPN | REG_SZ | kbdax2.dll |
LayerDriver KOR | REG_SZ | kbd101a.dll |
OverrideKeyboardIdentifier | REG_SZ | AX_105KEY |
OverrideKeyboardSubtype | REG_DWORD | 0x00000001 (1) |
OverrideKeyboardType | REG_DWORD | 0x00000007 (7) |
右 Alt が無いノートパソコンで作業するとき
Ctrl + Alt, Fn + Alt で右 Alt になるらしい。
【おまけ】コロンとセミコロンを swap する。
デフォルトでコロン、Shift と同時押しでセミコロンにしたかったので AutoHotKey を使用してカスタマイズした。.ahk ファイルを .exe に変換し、スタートアップに登録。