- AAA
- BBB
- CCC
- ...
これをそれぞれtar+gzip圧縮して
- AAA.tar.gz
- BBB.tar.gz
- CCC.tar.gz
- ...
をワンコマンドで作りたいのですけど、そういうことはできますか?
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
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 $_");
回答ありがとうございます。
ですが、シェルコマンドのみでの解決を求めています (私の質問が曖昧でした)。
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を使えば良いのですね。
すっきりしました。
おお、できました。すばらしい。
xargsをどう使うかで悩んでたんですが、for inを使えば良いのですね。
すっきりしました。