Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

あらゆるアーカイブを管理できるツール、atool

2008年02月13日 11:47 Ben-Martin(2008年2月5日(火)) 1 2 3

 この例を見て誰しも思うのが、アーカイブを展開するときに作成されるサブディレクトリーに自動的に移ってほしいということ。残念ながら、それにはaunpackをシェル関数で包む必要がある。次に示すシェル関数は、atoolマニュアル・ページにあるものを基に、サブプロセスの実行と、デフォルトで-iを含むようにエイリアスされているrmコマンドを回避するように修正してある。

    aunpack () {

     TMP=$(mktemp /tmp/aunpack.XXXXXXXXXX);
     atool -x --save-outdir=$TMP "$@"
     DIR="$(cat $TMP)"
     [ "$DIR" != "" -a -d "$DIR" ] && cd "$DIR"
     /bin/rm -f $TMP
    }

 arepackとadiffは、アーカイブのまま扱うコマンドだ。arepackはアーカイブの形式を変更し、adiffは2つのアーカイブを比較してそのdiffを表示する。args_diffオプションはdiffを生成する際のオプションで、デフォルトは-ruだ。次に示す例では、先の例で使ったtestdirを利用してテストしている。最後の例は、diffコマンドライン・オプションのデフォルトを変更し、diffで追加されたものだけが表示されるようにしている。

    $ ls -l testdir
    -rw-rw-r-- 1 ben ben   29 2008-01-17 18:11 df1.txt
    -rw-rw-r-- 1 ben ben   29 2008-01-17 18:11 df2.txt
    drwxrwxr-x 2 ben ben 4096 2008-01-17 18:11 subdir1
    $ ls -l testdir/subdir1/
    -rw-rw-r-- 1 ben ben 29 2008-01-17 18:11 subfileb.txt
    $ apack testdir-first.tar.gz testdir
    testdir/
    testdir/df1.txt
    testdir/subdir1/
    testdir/subdir1/subfileb.txt
    testdir/df2.txt
    $ mv testdir/df2.txt testdir/subdir1/
    $ date >>testdir/subdir1/subfileb.txt
    $ date >testdir/newfileA.txt
    $ apack testdir-second.tar.gz testdir
    testdir/
    testdir/newfileA.txt
    testdir/df1.txt
    testdir/subdir1/
    testdir/subdir1/subfileb.txt
    testdir/subdir1/df2.txt
    $ adiff testdir-first.tar.gz testdir-second.tar.gz
    Only in Unpack-1710/testdir: df2.txt
    Only in Unpack-7823/testdir: newfileA.txt
    Only in Unpack-7823/testdir/subdir1: df2.txt
    diff -ru Unpack-1710/testdir/subdir1/subfileb.txt Unpack-7823/testdir/subdir1/subfileb.t    xt
    --- Unpack-1710/testdir/subdir1/subfileb.txt    2008-01-17 18:11:16.000000000 +1000
    +++ Unpack-7823/testdir/subdir1/subfileb.txt    2008-01-17 22:39:40.000000000 +1000
    @@ -1 +1,2 @@
     Thu Jan 17 18:11:16 EST 2008
    +Thu Jan 17 22:39:40 EST 2008

    $ vi ~/.atoolrc
    args_diff -Nuar
    $ adiff testdir-first.tar.gz testdir-second.tar.gz |grep ^+
    +++ Unpack-9186/testdir/df2.txt 1970-01-01 10:00:00.000000000 +1000
    +++ Unpack-9186/testdir/newfileA.txt    2008-01-17 22:39:48.000000000 +1000
    +Thu Jan 17 22:39:48 EST 2008
    +++ Unpack-9186/testdir/subdir1/df2.txt 2008-01-17 18:11:06.000000000 +1000
    +Thu Jan 17 18:11:06 EST 2008
    +++ Unpack-9186/testdir/subdir1/subfileb.txt    2008-01-17 22:39:40.000000000 +1000
    +Thu Jan 17 22:39:40 EST 2008

 以上のように、ネイティブのコマンドが異なる圧縮方式やアーカイブ形式でも、atoolを使えば同じコマンドで操作することができる。

Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文

最終更新:2009年06月18日 13:58