研究でたまってきた実験データを一度解凍して評価しようかと思ったんですが、あまりに圧縮ファイルが大きすぎて解凍できない!!*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/
研究をしていると、実験結果を記録したファイルがたくさん生成されます。
これらのファイルに対して、シェルを使って同じ処理を行わせたい時もあると思うんですが、あまりにも対象のファイルが多いと「Arguments too long」というエラーメッセージが出てしまいます。今回は、それに如何にして対処するかを紹介します。
なぜ、このようなエラーメッセージが出るかというと、シェルではコマンドライン引数の長さが決まっているからです。この上限を変更することもできると思うのですが、それをしなくても xarg コマンドを利用することで解決することができます。
# 以下のコマンドをxargsを使って書き換え
# rm *.txt
echo *.txt | xargs rm
こんな感じで置き換えてやると、xargsコマンドが自動的にコマンドライン引数を分割して実行してくれます。慣れるととても簡単です。xargsについては、下記のウェブページに詳細があります。
[web] xargs - 68user's page
大量のファイルを扱っていると、ちょっとした操作ミスなどでファイルの拡張子を付け間違えてしまうことがあります。名前を変えるだけなんですが、それをちまちまと変更していく作業はとても苦痛!ということで、スクリプトを書いて一度に変更してしまいましょう。*2
では、単刀直入にその拡張子変更スクリプトをご紹介。
#!/bin/sh
for name in *.htm ; do
mv ${name%.htm}.html;
done
このサンプルでは、カレントディレクトリ内の拡張子が「htm」のファイルを「html」に変更する処理を行っています。
なので、スクリプトをちょっと変更するだけで応用を利かせることが可能です。
[web] 複数のファイル拡張子を一括で変更する - @IT
2006年6月 2日(金)
更新日:2008年01月10日(木)16:15
シェルスクリプト
シェルは決まった作業をまとめて実行できる点が非常にうれしいところです。ですが、もしそのスクリプトを修正する場合は注意すべき点があります。
もし、そのスクリプトを実行中に別のプロセスで修正すると、実行中の作業が正常に終了しない場合があります。もしくは予想されない動作をする場合があるので、実行中は修正しないほうがいいです。もし修正を行いたい場合は、かならず実行しているプロセスを終了させるかしたほうが安全です。