ShellScript

Last-modified: 2010-10-09 (土) 10:15:07

ワンライナー置き場

  • 連番フォルダを一括リネームするワンライナー
    for f in *; do mv '$f' `echo $f | sed "s/[^0-9]*\([0-9][0-9]\).*/\1/"`; done
    この例では2桁の連番フォルダ
    perlで似たこと
    find . -name \*\.bak | perl -nle '$o=$_;s/\.bak$//;rename $o,$_'
  • 特定の名前のファイルを一括削除するワンライナー [#r6c0aa29]
    find ./ -name ".svn" -exec rm -rf {} \;
    Thumbs.dbとかに有効

phpでOne Liner

  • 例1

    $ php -r 'echo "HelloWorld!";'

    • 例2

      $ ls -l bin/php-5.* | php -B '$sum=0;' -R '$vals=preg_split("/\s+/",$argn);$sum+=$vals[4];' -E 'echo "Total size of files: ", $sum, "\n";'

引用元:http://d.hatena.ne.jp/hnw/20090621

  • 移動はrename関数

Tips

  • 多重起動しない
    [ $$ = $(pgrep -fo $0) ] || exit
  • 標準ERROR出力のみをpipe(bashの場合)
    command 2>&1 1>/dev/null | command
  • stdout と stderr をともにpipe
    command 2>&1 | command
  • ファイル名やフルパスからその部分を求める
    http://www.kishiro.com/FreeBSD/get_filename_in_shellscript.html
    その心は、
${parameter%word}
最短後置パターンの削除: まず word が展開され、その結果をパターンとして扱います。パラメータ parameter の右から、パターンに一致する最短の部分を削除した文字列に置換されます。
${parameter%%word}
最長後置パターンの削除: まず word が展開され、その結果をパターンとして扱います。パラメータ parameter の右から、パターンに一致する最長の部分を削除した文字列に置換されます。
${parameter#word}
最短前置パターンの削除: まず word が展開され、その結果をパターンとして扱います。パラメータ parameter の左から、パターンに一致する最短の部分を削除した文字列に置換されます。
${parameter##word}
最長前置パターンの削除: まず word が展開され、その結果をパターンとして扱います。パラメータ parameter の左から、パターンに一致する最長の部分を削除した文字列に置換されます。
引用元
参考
  • trim
    | sed 's/^ *\(.*\) *$/\1/'
  • フィールドセパレータの設定(' 'いりのファイルを正しく区切る)
    IFS="
    "
    or
    IFS=\

参考

  • 処理時間計測
    START=`date +%s`
    <process>
    END=`date +%s`
SS=`expr ${END} - ${START}`
HH=`expr ${SS} / 3600`
SS=`expr ${SS} % 3600`
MM=`expr ${SS} / 60`
SS=`expr ${SS} % 60`
echo "${HH}:${MM}:${SS}"
  • jotとseq
    macにはseqがないという驚くべき事態なので、かわりにjotを使う。jotの方が文字列を扱えたりと、拡張されている。
    seq begin end = jot end-begin+1 begin

参考リンク

http://www.commandlinefu.com/commands/browse
http://d.hatena.ne.jp/hnw/20090621
http://docs.php.net/manual/ja/features.commandline.php