人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[OSX, BSD] カレントディレクトリに以下のディレクトリがあり
- AAA
- BBB
- CCC
- ...
これをそれぞれtar+gzip圧縮して
- AAA.tar.gz
- BBB.tar.gz
- CCC.tar.gz
- ...
をワンコマンドで作りたいのですけど、そういうことはできますか?

●質問者: room661
●カテゴリ:コンピュータ
✍キーワード:AAA BSD CCC gzip OSX
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
●10ポイント

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 $_");
◎質問者からの返答

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

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


2 ● a-kuma3
●60ポイント ベストアンサー

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
◎質問者からの返答

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

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

すっきりしました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ