Bシェル系、Cシェルは知らん。
コマンド実行時の標準出力と標準エラー出力は、いずれもディスプレイ(コンソール画面)。出力先を切り替えるには > を使う
$ command 1>/dev/null 2>&1
「commandを実行、1(標準出力)の出力先を/dev/nullに、2(エラー出力)の出力先を1と同じに」という意味。
間違いの例として以下のようなものがある
$ command 2>&1 >/dev/null
これは「commandを実行、2の出力先を1(シェルの画面)と同じに、1の出力先を/dev/nullに」という意味になる。
1と2を変数だと思えば分かりやすい。
$ command 1>/dev/null 2>&1 #リダイレクション処理 # var _1 = "コンソール画面" # var _2 = "コンソール画面" # _1 = "/dev/null" # _2 = _1 #結果 # _1 => /dev/null # _2 => /dev/null
ImageMagicでフォルダ内の画像を全部処理
for i in *; do convert ${i} -resize x130 "x_${i}"; done
空白の入ったファイル名も上手い事やってくれるようにする
find * -maxdepth 0 -print0 | xargs -0 -i convert {} -resize x130 "x_{}" # 引数の場所指定
指定の文字列を持つファイルを探す
grep Hogehoge -nrH ./lib
.svnフォルダを削除
find . -name ".svn" -exec rm -rf {} \;
find . -name ".svn" | xargs rm -rf
svn管理下にないファイルをファイルをまとめてadd
for i in `svn status | grep '^\?' | awk '{print $2}'`; do svn add $i; done
たぶんbashのスクリプト
標準入力から1行読み取る
read line echo $line
標準入力が尽きるまで行を読み取る
while read line do echo $line done
ファイルから行を読み込みする
while read line do echo $line done < hoge.txt
ヒアドキュメントから行を読み込みする
while read line do echo $line done << EOS 1 2 3 EOS
指定のファイルだけ更新する
rsync -a --include=*/ --include-from=list.txt --exclude=* hoge@192.168.1.2:~/syncdir/ ~/syncdir/
更新対象のファイル一覧は –include-from オプションで指定する。–includeオプションで指定してもいいが、こういうケースでは対象が多くあると思われるのでファイルに記述するのが楽だろう。
フォーマット
date +%Y%m%d
エポック秒
date +%s
ファイルの更新日を取得
date -r ファイル名
フォーマット変換
date -d '2011/01/31 01:15:30' '+%Y-%m-%d %H:%M:%S'
指定日付の一ヶ月前を取得
date -d '2011/01/01 1 month ago' '+%Y-%m-%d'
dオプションはGNU dateのみ
圧縮ファイルを直接閲覧
gzip -c -d auth.log.2.gz | less
cは元ファイルを削除せずに標準出力へ書き出するオプション
zcat auth.log.2.gz | less