
¿Cómo puedo comprimir archivos con el mismo nombre de salida que el de la carpeta principal?
Por ejemplo, tengo las carpetas:
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
Me gustaría comprimir la carpeta en_2017-04-28_20-26-59-439552
enen_2017-04-28_20-26-59-439552.tar.bz2
Podría usarlo con el programa gratuito de código abierto. lbzip2
:
tar -c -I lbzip2 -f en_2017-04-28_20-26-59-439552.tar.bz2 *
Sin embargo, no quiero que el comando contenga el nombre del archivo comprimido ( en_2017-04-28_20-26-59-439552.tar.bz2
), porque en mi aplicación no lo sé de antemano.
Respuesta1
Finalmente utilicé el siguiente script bash:
for d in */ ; do
tar -c -I lbzip2 -f "${d%/}.tar.bz2" "$d"
done
Algunos comentarios:
for d in */ ; do
recorrer directorios (¿Cómo recorro solo directorios en bash?)${d%/}
elimina la barra diagonal final del nombre de la carpeta (volvería$d
sin cambios si no hubiera una barra diagonal final).- Esto crea un archivo para ambos subdirectorios de los directorios actuales y enlaces simbólicos en el directorio actual que apuntan a un directorio existente.