상위 폴더와 이름이 같은 출력 파일을 압축하는 방법은 무엇입니까?

상위 폴더와 이름이 같은 출력 파일을 압축하는 방법은 무엇입니까?

상위 폴더와 이름이 같은 출력 파일을 압축하는 방법은 무엇입니까?

예를 들어 다음과 같은 폴더가 있습니다.

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폴더 이름에서 후행 슬래시를 제거합니다(후행 슬래시가 없으면 변경되지 않은 상태로 반환).
  • 이는 현재 디렉토리의 하위 디렉토리 아카이브와 기존 디렉토리를 가리키는 현재 디렉토리 내의 심볼릭 링크를 생성합니다.

관련 정보