親フォルダーと同じ出力名でファイルを圧縮するにはどうすればよいですか?

親フォルダーと同じ出力名でファイルを圧縮するにはどうすればよいですか?

親フォルダーと同じ出力名でファイルを圧縮するにはどうすればよいですか?

たとえば、次のフォルダーがあります:

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末尾のスラッシュがない場合は変更されずに返されます)。
  • これにより、現在のディレクトリのサブディレクトリと、現在のディレクトリ内の既存のディレクトリを指すシンボリック リンクの両方のアーカイブが作成されます。

関連情報