コマンドラインで便利なフレーズ

ファイルの検索

感動した!
現在のディレクトリ以下で今日更新されたファイル(のみ)、但しtemplates_cとcacheディレクトリは除く

find . -mtime -1 -ls -type f |grep -v "templates_c|cache"

現在のディレクトリ以下で1時間以内に更新されたファイル、但しDS_Storeは除く

find . -mmin -60 -ls |grep -v "DS_Store"

現在のディレクトリ以下で.cgiの拡張子のファイルを(ファイル名を)表示しつつのパーミッションを755に
find . -name “*.cgi” -ls -exec chmod 755 {} \;

参照
どこにあるか分からないファイルを検索

現在のディレクトリ以下で60分以内に更新されているファイルを一つ上にあるmodifiedディレクトリにディレクトリ構造を保ったままコピー

find . -mmin -60 -print0 | cpio -pd0 ../modified

昨日以降の場合

find . -mtime -1 -print0 | cpio -pd0 ../modified

拡張子ごとのファイル数を数える


$ find . -type f -print | sed -e 's/^.\///' | grep '.' | sed -e 's/^..//' | sort | uniq -c | sort -nr

参照・すばらしい:シェルで拡張子一覧:教えてGoo

ファイル数を数える

(下のは.csvファイルのみ)

find ./ -name "*.csv" | wc -l

参照: 逆引きUNIXコマンド/ファイル数を取得する

ファイルの内容を検索
find . -type f -exec grep -q hoge {} \; -print

参考:「ファイルの中身の文字列を検索したい 」
http://h30499.www3.hp.com/t5/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%AE%A1%E7%90%86/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%9F%E3%81%84/td-p/1182069?profile.language=ja#.Vdp0jdOvExM

find と xargsを使った便利なこと

現在のディレクトリ以下のファイルの文字コードを出力

find . -type f -print0 | xargs -0 nkf --guess

パスワード付きのZip圧縮

hoge.docをhoge.zipにパスワード付きのzipにする

$ zip -e hoge.zip hoge.doc
Enter password:
Verify password:

この間までzipしたあとzipcloakとか使ってましたが、こっちのほうが簡潔かも。

ディレクトリを比較し、ファイルの存在に関する差分を出力


diff -I ".*" -r dir_a dir_b

http://okwave.jp/qa/q1470351.html

出力したファイルから明らかに関係ないファイルを削除

cat result.txt |grep -v '_baks|Thumbs.db|.LCK|_notes|.files|_mm' > result3.txt

手元にないWebサイトのひな形作成

再帰的に、相対リンクに書き換え、1つ先の階層まで、の場合

wget -r -k -l 1 http://example.com

1ページのみ、相対リンクに書き換え

wget -p -k http//example.com/hoge.html

ヘッダを追加とURLのリストを指定

wget --header="Authorization: Basic hogehogehoge" -p -k -i path/to/file.txt

ローカルでサイト作成後リンク切れや使っていないファイルをあぶり出す(スタティックに限る)

  1. wgetでローカルのコンテンツをHTTPを使ってコピー
    log.txtにログを出すように、再帰的に、上のディレクトリには行かない
    その後ログを開いてNot Foundと出た行の前3行を含めて表示

    wget -o log.txt -r -np http://localhost/hogehoge/ ; cat log.txt|grep -n -B 3 "Not Found"

    その後、コピーされたファイル群とローカルにあるサイトの中身をDiff(MacOSXだとFileMerge)で比較

linkcheckerを使う

まあ、専用のツールなので。。

linkchecker -Fhtml http://localhost/hoge

Numbersのアルファベットの列名をR1C1形式の数字に(コマンドラインと言っていいか微妙)


python -c "import sys; print (ord(sys.argv[1][0])-ord('A')+1)*26+(ord(sys.argv[1][1])-ord('A')+1)" 'AA'

ディスクイメージの書き込み

経過の分かるdd
homebrewなどでpvをインストールしておく。

brew install pv

パスワードを入れる事ができなくて2回目のsudoでこけるので、予めsudoで何かしてパスワードを再入力しなくても良い状態にしなければならない。sudo lsでも大丈夫と思われます。(MacOSXの場合。sudo ddしなくても良い場合は関係ないです)

sudo dd if=/path/to.img | pv | sudo dd of=/dev/rdisk1 bs=1m

ブロックサイズはデフォルトだと百数キロバイト/s、1m以上だと13.3MiB/s、/dev/disk1だと遅く、同じデバイスを指す/dev/rdsik1だと速い。
パーセンテージを出すやり方もありそうです。
http://askubuntu.com/questions/215505/how-do-you-monitor-the-progress-of-dd

Perlのデバッグ

PHPのerror_log();的なもの、いつも忘れてしまう。。
print STDERR “Hello\n”;

多言語化を手動でやる場合

homebrewでgettextをインストールしてもxgettextが使えない。。
フルパスを指定するとできました(バージョンは適宜)。

テンプレートの作成
()で囲んであるテキストがsrc_file.pyにあり、hoge.potを出力
/usr/local/Cellar/gettext/0.19.5.1/bin/xgettext -k”
” -o hoge.pot src_file.py

hoge.potから日本語のpoファイルを生成
/usr/local/Cellar/gettext/0.19.5.1/bin/msginit –locale=ja –input=hoge.pot

その後poEditなどで翻訳作業。

参考になりました。
GetTextを用いたローカライズ方法

(いまさら)ファイルのコピー

「同名のディレクトリに階層を保ったままコピー」という状況
aのディレクトリと同じ(違っても良いですが)ディレクトリ構成のb以下のファイル・ディレクトリをコピー、ファイルを上書きしそうになったら知らせる。
cp -ri b/* a

コマンドの履歴を表示

history

minicomでポートを指定

minicom -D /dev/ttyACM0

セクタサイズ・ブロックサイズの確認@macos

セクタサイズ・ブロックサイズは同じという認識ですが、、
diskutil info /dev/disk5s1
disk5で止めてしまうと恐らく書き込むときの単位(ソフト寄りの話)になってしまうような気がします。
disk5s1までやると

Volume Total Space: 127.7 GB (127721799680 Bytes) (exactly 249456640 512-Byte-Units)
Volume Used Space: 83.2 GB (83197489152 Bytes) (exactly 162495096 512-Byte-Units) (65.1%)
Volume Free Space: 44.5 GB (44524310528 Bytes) (exactly 86961544 512-Byte-Units) (34.9%)
Allocation Block Size: 4096 Bytes

とか言う格好でAllocation Block Sizeというのが出てくるので、こちらが正解(?)。
Windowsで4096のブロックサイズでexFATフォーマットできたものの、AndroidやらmacOSからは壊れているとかできちんと扱ってもらえない模様。。

他、Windowsでフォーマットする時、デフォルトのパラメータで間に合わない場合など
http://www.atmarkit.co.jp/ait/articles/1307/29/news117.html

いろいろクリアする

環境変数再読み込み

$ source ~/.bash_profile

インストールしたRubyを使用可能な状態にする

$ rbenv rehash

正規表現

タブ区切りと思ったらスペース区切りだったものをタブ区切りに
こちらを参考にさせていただきました。

[^\S\n]+