상위 폴더와 동일한 출력 이름을 가진 파일을 압축하려면 어떻게 해야 합니까?

상위 폴더와 동일한 출력 이름을 가진 파일을 압축하려면 어떻게 해야 합니까?

상위 폴더와 동일한 출력 이름을 가진 파일을 압축하려면 어떻게 해야 합니까?

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

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후행 슬래시가 없으면 변경되지 않은 상태로 반환됩니다).
  • 이렇게 하면 현재 디렉터리의 하위 디렉터리와 기존 디렉터리를 가리키는 현재 디렉터리의 심볼릭 링크에 대한 아카이브가 생성됩니다.

관련 정보