1

たくさんの *.tgz ファイルがあり、それらを untar すると、ディレクトリ名が tgz ファイルの名前とどのように異なるかがわかりません。例: 私は ab.tgz ファイルを持っていて、2012_test_ab のようなものに変更されます。これは、圧縮ファイルが親ディレクトリなどにあったときに、この圧縮ファイルの名前が変更されたに違いないために発生したと感じています。

しかし、私がやりたいのは、ディレクトリの名前をファイルの元の名前に変更することです。

端末で実行する次の 1 行のスクリプトがありますが、名前を変更するにはどうすればよいですか?

for i in *.tgz; do tar xvf $i -C ../stats/; done

これを変更して、解凍するディレクトリの名前を変更するにはどうすればよいですか。

例: untar するとab.tgz、ディレクトリ名に抽出され2013_03_12_18_26_ab、そのディレクトリ内のファイルが表示されますが、ディレクトリ名を ab ではなく ab のままにしておく必要があります。2013_03_12_18_26_ab

ab.tgz抽出したい../stats/ab

4

2 に答える 2

1

このようなものがうまくいくかもしれません。まだ早いので、構文が少しずれている可能性があります。

for i in *.tgz
do 
NEWDIR=`tar -tf $i | head -1 | cut -d/ -f2 | cut -d_ -f6` 
mkdir ../stats/$NEWDIR 
tar xvf $i -C ../stats/$NEWDIR/ 
done

また

for i in *.tgz; do NEWDIR=`tar -tf $i | head -1 | cut -d/ -f2 | cut -d_ -f6`; mkdir ../stats/$NEWDIR; tar xvf $i -C ../stats/$NEWDIR/; done
于 2013-03-21T13:20:37.547 に答える
1

すべての tar アーカイブが .tgz 拡張子で終わり、元のファイル名に複数のドットがあると仮定すると、次のようになります。

for i in *.tgz; do tname=$(echo $i | sed -e 's/.tgz//') ; tar xvf $i -C ../stats/$tname; done
于 2013-03-21T18:57:31.653 に答える