xargsで標準入力がない場合の条件分岐

find と xargs を組み合わせて処理するとき、find 結果が一件もない場合がある。 たとえば、xargs で tar すると、引数が一件もない場合は以下のように終了ステータスが異常になってしまう。終了ステータスをチェックする処理が入っていると、これでは困る。 こういうケースでは、xargs に GNU 拡張の –no-run-if-empty/-r オプションを渡すと、標準入力が何もなければコマンドが実行されなくなる。 –no-run-if-empty/-r If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input. This option is a GNU extension. 実際に使ってみると というように正常終了する。

スクリーンキャストで学ぶGNU Parallel

プログラムを並列処理する GNU Parallel 作者の Ole Tange が YouTube で GNU Parallel の初心者向けチュートリアル(スクリーンキャスト)を2本(ともに10分)公開していたので内容をざっとメモ。 GNU Parallel はコマンドラインツールなので、コマンドを実行しながらひたすらしゃべって解説しているだけ。 スクリーンキャストといっても、Web フレームワークのような華やかさは全くない。 Part 1: GNU Parallel script processing and execution GNU PARALLEL – BASIC USAGE GET GNU PARALLEL ダウンロードとインストール YOUR FIRST PARALLEL JOBS 合計1GB の大量のログファイルを圧縮&解凍 GNU Parallel を使うと、デュアルコア CPUx1 の環境では CPU 使用率は2倍になり、処理時間は 1/2 になる。 gzip に -l(–list) オプションをつけると、以下の情報も表示される。 compressed size:Continue reading “スクリーンキャストで学ぶGNU Parallel”

Using OCR in Google Docs

Google Docs を使うと、PDF/画像ファイルからテキストを復元できる。 やりかたは簡単で 「Convert text from PDF or image files to Google Docs documents.」のチェックを入れ ドキュメントが書かれている言語を指定するだけ(マイナーな言語の場合、何語かわからない場合もあるけど、、、) —– この機能は2010年の6月に開始され、2011年2月末には34カ国語に対応している。 Optical character recognition (OCR) in Google Docs (June 22, 2010) Optical Character Recognition (OCR) in 34 languages (February 28, 2011) さらには Google Documents List Data API V3.0 にも対応してる。 Uploading documents using Optical Character Recognition (OCR) 肝心なのは文字の認識率。 フランス語、日本語で試した限り、テキスト埋め込みのPDFはともかく、画像埋め込みのPDFや画像そのものは実用とはほど遠い認識率。ポツポツとテキストを拾えている程度。Continue reading “Using OCR in Google Docs”

Excelの列番号を数字に変換

■前提 Excel の列番号は A-Z で 26 表記されている。 ■ユースケース CSVファイルをExcel内でしか処理していない人は「10列目」のことを「J列目」と表現したりするので、10進表記と「A-Z」の26進表記を手っ取り早く変換したい場合の利用を想定。 ■プログラム 深い理由はないけれども、とりあえず Python で実装 ・10進→26進変換(num2char) ・26進→10進変換(char2num) def num2char(num): ”’ 1 -> A 27 -> AA ”’ quotient, remainder = divmod(num, 26) chars = ” if quotient > 0: chars = chr(quotient + 64) if remainder > 0: chars = chars + chr(remainder + 64) return charsContinue reading “Excelの列番号を数字に変換”

screenでスクロールバック

GNU screen 使用中に画面をスクロールバックしたい場合、screen にビルトインされたコピー機能を利用することでロールバック可能。 ■ロールバック方法 次のコマンドでロールバック可能になる。 エスケープキー + <ESC> このコマンドを入力すると、コピーモードを伝えるメッセージが表示される。 Copy mode – Column 23 Line 42(+1024) (91,42) コピーモードに入った後は、vi と同じキー操作でスクロールすることが可能。 なお、コピーモードを抜けるには <ESCAPE KEY> を実行すればよい。 「Copy mode aborted」というメッセージが表示される。 ■コピー方法 コピーモードでは、範囲指定してテキストをコピーできる。 コピー開始/終了の合図は <SPACE KEY> で行う。 開始時には「First Mark Set」のメッセージが、終了時には「Copied 2263 characters into buffer」のようなメッセージが表示される。 コピー内容をペーストするには次のコマンドを実行 エスケープキー + ] ■ロールバック行数 ロールバック行数は defscrollback で設定可能。 Same as the scrollback command except that the defaultContinue reading “screenでスクロールバック”

screenでスクリーンロックをかける

■screen で画面ロックをかける GNU screen 使用中に画面ロックをかけたい場合「METAキー + x」を入力すればよい。 Call a screenlock program (/local/bin/lck or /usr/bin/lock or a builtin, if no other is available). Screen does not accept any command keys until this program terminates. Meanwhile processes in the windows may continue, as the windows are in the detached state. The screenlock program may be changed throughContinue reading “screenでスクリーンロックをかける”

dateコマンドで日付計算

date コマンドを使って、相対日付の計算をする必要があったので、メモ ■利用単位 日→day 週→week 月→month 年→year ■現在より未来の日付を計算 $ date +%Y%m%d 20100221 $ date +%Y%m%d –date “1 day” 20100222 $ date +%Y%m%d –date “1 week” 20100228 $ date +%Y%m%d –date “1 week 1 day” 20100301 $ date +%Y%m%d –date “1 month” 20100321 $ date +%Y%m%d –date “1 month” 20100321 $ date +%Y%m%d –date “1 monthContinue reading “dateコマンドで日付計算”

既存のファイルを空にする

既存のファイルを空(0バイト)にする方法。ファイルが存在していないのであれば、$ touch filename とやればいいだけ。 既存のファイルを空にするには、次のいずれかで実現可能。 $ > filename $ :> filename $ echo -n > filename $ cat /dev/null > filename $ cat > filename 2例目で “:>” というのが利用されている。「:」をつけることで、リダイレクトのみだとNGなシェルでも動くようになるというコメントを見つけたけど、実際にどんなシェルでNGなのか、とか、そもそも「:」が何なのかは不明。 via : Quick Tip: Delete the Contents of a File without Removing and Recreating It なお、あるファイルが0 byte(空)かどうかの判定は test -s でOK.(-s FILE : FILE exists and has a sizeContinue reading “既存のファイルを空にする”