
Wie kann ich Dateien komprimieren, deren Ausgabename der des übergeordneten Ordners ist?
Ich habe beispielsweise die Ordner:
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
Ich möchte den Ordner komprimieren en_2017-04-28_20-26-59-439552
inen_2017-04-28_20-26-59-439552.tar.bz2
Ich könnte das kostenlose Open-Source-Programm verwenden lbzip2
:
tar -c -I lbzip2 -f en_2017-04-28_20-26-59-439552.tar.bz2 *
Ich möchte allerdings nicht, dass der Befehl den Namen der Archivdatei ( en_2017-04-28_20-26-59-439552.tar.bz2
) enthält, da ich ihn in meiner Anwendung nicht im Voraus kenne.
Antwort1
Ich habe schließlich das folgende Bash-Skript verwendet:
for d in */ ; do
tar -c -I lbzip2 -f "${d%/}.tar.bz2" "$d"
done
Einige Kommentare:
for d in */ ; do
durch Verzeichnisse blättern (Wie durchlaufe ich in Bash nur Verzeichnisse?)${d%/}
entfernt den abschließenden Schrägstrich des Ordnernamens (es würde$d
unverändert zurückgegeben, wenn es keinen abschließenden Schrägstrich gäbe).- Dadurch wird ein Archiv sowohl für die Unterverzeichnisse der aktuellen Verzeichnisse als auch für symbolische Links im aktuellen Verzeichnis erstellt, die auf ein vorhandenes Verzeichnis verweisen.