[OSX, BSD] カレントディレクトリに以下のディレクトリがあり

- AAA
- BBB
- CCC
- ...
これをそれぞれtar+gzip圧縮して
- AAA.tar.gz
- BBB.tar.gz
- CCC.tar.gz
- ...
をワンコマンドで作りたいのですけど、そういうことはできますか?

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/01/28 10:33:15
  • 終了:2011/01/28 19:57:52

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4546ベストアンサー獲得回数18962011/01/28 12:19:46

ポイント60pt

bourne shell だと、こんな感じ。

for d in * ; do (tar cf - $d | gzip -c > $d.tar.gz) ; done

tar が GNU tar なら、こうでも良い。

for d in * ; do (tar czf $d.tar.gz $d) ; done
id:room661

おお、できました。すばらしい。

xargsをどう使うかで悩んでたんですが、for inを使えば良いのですね。

すっきりしました。

2011/01/28 19:55:13

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/01/28 11:29:44

ポイント10pt

Macで動かしていないので、まずはprintにて正常なコマンドが生成されるかの確認を行ってみてください

#!/usr/bin/perl --
opendir( DH, './') or die ("ディレクトリオープン失敗"); # このファイルの置かれれいるディレクトリ内を対象としています
@dir = readdir( DH );
foreach( @dir ) {
    if ( -d $_ ) {
        print "tar czvf $_.tar.gz $_\n";
    }
}
closedir( DH );

上記で問題が無ければprintの行を下記に入れ替えてください

        system("tar czvf $_.tar.gz $_");
id:room661

回答ありがとうございます。

ですが、シェルコマンドのみでの解決を求めています (私の質問が曖昧でした)。

2011/01/28 11:39:17
id:a-kuma3 No.2

a-kuma3回答回数4546ベストアンサー獲得回数18962011/01/28 12:19:46ここでベストアンサー

ポイント60pt

bourne shell だと、こんな感じ。

for d in * ; do (tar cf - $d | gzip -c > $d.tar.gz) ; done

tar が GNU tar なら、こうでも良い。

for d in * ; do (tar czf $d.tar.gz $d) ; done
id:room661

おお、できました。すばらしい。

xargsをどう使うかで悩んでたんですが、for inを使えば良いのですね。

すっきりしました。

2011/01/28 19:55:13
  • id:windofjuly
    うぃんど 2011/01/28 14:12:58
    もしも、私の返答をお待ちで a-kuma3 さんの回答をオープンしないという状況だったら申し訳ないので途中ですがコメントしておきます
    シェルで行う場合は下記のような構文で連続実行できるのですが、ディレクトリ名の末尾に不要な/が付いたままになってしまうため解決に至らずにいます
    for f in `ls|grep /$`; do echo $f; done
  • id:windofjuly
    うぃんど 2011/01/28 20:11:07
    カレントディレクトリ直下にはファイルが1つもなくてAAAなどのディレクトリのみが存在していたのですね・・・考えすぎてました(苦笑)
  • id:sayo212sayo
    コメント荒らし キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!
     
    環境がない時は回答しないポリシーじゃなかったっけww

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません