如何压缩输出名称与父文件夹相同的文件?
例如,我有一个文件夹:
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
我想将文件夹压缩en_2017-04-28_20-26-59-439552
到en_2017-04-28_20-26-59-439552.tar.bz2
我可以使用免费的开源程序 lbzip2
:
tar -c -I lbzip2 -f en_2017-04-28_20-26-59-439552.tar.bz2 *
但是,我不希望命令包含存档文件的名称 ( en_2017-04-28_20-26-59-439552.tar.bz2
),因为在我的应用程序中我事先不知道它。
答案1
我最终使用了以下 bash 脚本:
for d in */ ; do
tar -c -I lbzip2 -f "${d%/}.tar.bz2" "$d"
done
一些评论:
for d in */ ; do
循环遍历目录(如何在 bash 中仅循环目录?)${d%/}
$d
删除文件夹名称的尾部斜杠(如果没有尾部斜杠,则返回不变)。- 这会为当前目录的子目录以及当前目录中指向现有目录的符号链接创建存档。