- 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 $_");
シェルで行う場合は下記のような構文で連続実行できるのですが、ディレクトリ名の末尾に不要な/が付いたままになってしまうため解決に至らずにいます
for f in `ls|grep /$`; do echo $f; done
環境がない時は回答しないポリシーじゃなかったっけww