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

1

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

Por exemplo, 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

Gostaria de compactar a pasta en_2017-04-28_20-26-59-439552 em en_2017-04-28_20-26-59-439552.tar.bz2

Eu poderia usar 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, eu não quero que o comando contenha o nome do arquivo ( en_2017-04-28_20-26-59-439552.tar.bz2 ), porque na minha aplicação eu não sei antecipadamente.

    
por Franck Dernoncourt 29.04.2017 / 03:56

1 resposta

1

Eu finalmente usei o seguinte script:

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

Alguns comentários:

  • for d in */ ; do de loop através de diretórios ( Como faço para percorrer apenas diretórios no bash? )
  • ${d%/} remove a barra final do nome da pasta (retornaria $d inalterado se não houvesse barra final).
  • Isso cria um archive para os subdiretórios dos diretórios atuais e os links simbólicos no diretório atual que apontam para um diretório existente.
por 29.04.2017 / 04:23