Como posso compactar arquivos com o mesmo nome de saída da pasta pai?

Como posso compactar arquivos com o mesmo nome de saída da pasta pai?

Como posso compactar arquivos com o mesmo nome de saída da pasta pai?

Por exemplo, eu tenho as pastas:

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

Eu gostaria de compactar a pasta en_2017-04-28_20-26-59-439552emen_2017-04-28_20-26-59-439552.tar.bz2

Eu poderia usar com o programa gratuito e de código aberto lbzip2:

tar -c -I lbzip2 -f en_2017-04-28_20-26-59-439552.tar.bz2 *

No entanto, não quero que o comando contenha o nome do arquivo compactado ( en_2017-04-28_20-26-59-439552.tar.bz2), porque em meu aplicativo não o sei com antecedência.

Responder1

Acabei usando o seguinte script bash:

for d in */ ; do
   tar -c -I lbzip2 -f "${d%/}.tar.bz2" "$d"
done

Alguns comentários:

  • for d in */ ; dopercorrer diretórios (Como faço para percorrer apenas diretórios no bash?)
  • ${d%/}remove a barra final do nome da pasta (ela retornaria $dinalterada se não houvesse barra final).
  • Isso cria um arquivo para ambos os subdiretórios dos diretórios atuais e links simbólicos no diretório atual que apontam para um diretório existente.

informação relacionada