
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-439552
emen_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 */ ; do
percorrer diretórios (Como faço para percorrer apenas diretórios no bash?)${d%/}
remove a barra final do nome da pasta (ela retornaria$d
inalterada 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.