
親フォルダと同じ名前の出力ファイルを圧縮するには?
たとえば、次のフォルダがあります。
ubup@neter:/NeuroNER-master/output$ tree
.
├── en_2017-04-28_20-26-59-439552
│ ├── 000_test.txt
│ ├── 000_test.txt_conll_evaluation.txt
│ ├── 000_train.txt
│ ├── 000_train.txt_conll_evaluation.txt
│ ├── 000_valid.txt
│ ├── 000_valid.txt_conll_evaluation.txt
│ ├── 001_test.txt
│ ├── 001_test.txt_conll_evaluation.txt
│ ├── 001_train.txt
│ ├── confusion_matrix_for_epoch_0005_in_valid_binary_evaluation.df
│ ├── confusion_matrix_for_epoch_0005_in_valid_bio_evaluation.df
│ ├── confusion_matrix_for_epoch_0005_in_valid_token_evaluation.df
│ ├── model
│ │ ├── checkpoint
│ │ ├── dataset.ickle
│ │ ├── tensorboard_metadata_characters.sv
│ ├── results.son
│ └── tensorboard_logs
│ ├── test
│ │ └── events.ut.fevents.493425627.er
フォルダを圧縮したいですen_2017-04-28_20-26-59-439552
。en_2017-04-28_20-26-59-439552.tar.bz2
無料のオープンソースプログラムが利用可能 lbzip2
:
tar -c -I lbzip2 -f en_2017-04-28_20-26-59-439552.tar.bz2 *
en_2017-04-28_20-26-59-439552.tar.bz2
しかし、私のアプリケーションではあらかじめわからないので、コマンドにアーカイブファイル名()を含めたくありません。
答え1
私は次のbashスクリプトを使用しました。
for d in */ ; do
tar -c -I lbzip2 -f "${d%/}.tar.bz2" "$d"
done
いくつかのコメント:
for d in */ ; do
ディレクトリを介してループ(Bashでディレクトリだけを繰り返す方法は?)${d%/}
$d
フォルダ名から末尾のスラッシュを削除します(末尾のスラッシュがない場合は変更されていない状態に戻ります)。- これにより、現在のディレクトリのサブディレクトリのアーカイブと、既存のディレクトリを指す現在のディレクトリ内のシンボリックリンクが生成されます。