¿Cómo puedo comprimir archivos con el mismo nombre de salida que el de la carpeta principal?

¿Cómo puedo comprimir archivos con el mismo nombre de salida que el de la carpeta principal?

¿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-439552enen_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 */ ; dorecorrer directorios (¿Cómo recorro solo directorios en bash?)
  • ${d%/}elimina la barra diagonal final del nombre de la carpeta (volvería $dsin 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.

información relacionada