シェルスクリプト: 2008年1月アーカイブ

研究でたまってきた実験データを一度解凍して評価しようかと思ったんですが、あまりに圧縮ファイルが大きすぎて解凍できない!! *1 ということで、ウェブをいろいろと探していたら、ちょうど目的に適ったページを発見することができました。

実験データを収めた圧縮ファイルは、tar.gz形式(=tgz形式)になっています。そのウェブページには、圧縮ファイルの一部分だけを解凍・展開させる方法が書かれていました。

[web] 圧縮された.tgzファイルの一部分のみ解凍する方法 - OKWave

このページによると、次のようにすれば一部分だけ解凍・展開させることができるそうです。以下では、圧縮ファイルtest.tar.gzファイルから、test/file.txtのみを解凍させる方法を記述します。

% tar xvzf test.tar.gz test/file.txt

また、同様にしてディレクトリ内のすべてのファイルを解凍・展開することもできます。

% tar xvzf test.tar.gz test/dir/
*1 : 解凍しようとしてもメモリと時間を食いすぎてとてもムリ!

研究をしていると、実験結果を記録したファイルがたくさん生成されます。
これらのファイルに対して、シェルを使って同じ処理を行わせたい時もあると思うんですが、あまりにも対象のファイルが多いと「Arguments too long」というエラーメッセージが出てしまいます。今回は、それに如何にして対処するかを紹介します。

なぜ、このようなエラーメッセージが出るかというと、シェルではコマンドライン引数の長さが決まっているからです。この上限を変更することもできると思うのですが、それをしなくても xarg コマンドを利用することで解決することができます。

# 以下のコマンドをxargsを使って書き換え
# rm *.txt

echo *.txt | xargs rm

こんな感じで置き換えてやると、xargsコマンドが自動的にコマンドライン引数を分割して実行してくれます。慣れるととても簡単です。xargsについては、下記のウェブページに詳細があります。

[web] xargs - 68user's page

大量のファイルを扱っていると、ちょっとした操作ミスなどでファイルの拡張子を付け間違えてしまうことがあります。名前を変えるだけなんですが、それをちまちまと変更していく作業はとても苦痛!ということで、スクリプトを書いて一度に変更してしまいましょう。 *1

では、単刀直入にその拡張子変更スクリプトをご紹介。

#!/bin/sh

for name in *.htm ; do
    mv ${name%.htm}.html;
done

このサンプルでは、カレントディレクトリ内の拡張子が「htm」のファイルを「html」に変更する処理を行っています。 なので、スクリプトをちょっと変更するだけで応用を利かせることが可能です。

[web] 複数のファイル拡張子を一括で変更する - @IT

*1 : ちなみにここでは、Linuxなどのようなシェルが使える環境を前提としています。Windowsの場合は、cygwinなどのUnixライクな環境があればそこで同様に処理が行えます。

Advertizement

このアーカイブについて

このページには、2008年1月以降に書かれたブログ記事のうちシェルスクリプトカテゴリに属しているものが含まれています。

前のアーカイブはシェルスクリプト: 2006年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

シェルスクリプト: 2008年1月: 月別アーカイブ

Powered by Movable Type 5.0

最近のコメント

kaneko on PowerPoint Viewer 2007が起動しない時の対処法: この情報を見て本当に
hszaki on ハワイアン・バーガー: 残念・・
alto on ハワイアン・バーガー: 食べたその日にこの記
tetsu on ハワイアン・バーガー: マヨネーズは・・・、
hszaki on ハワイアン・バーガー: マヨネーズ入っていた
tetsu on MovableType5にアップグレード: 指摘ありがとうござい
hszaki on MovableType5にアップグレード: 新年早々、エリクサー
tetsu on FFXIII: win2000って.
alto on FFXIII: こっちでも仕事でちょ
tetsu on 所属オケの演奏会: ごめんなさい^^;

カウンタ

リンク