简体   繁体   English

创建目录的tar.gz并清理除文件以外的目录?

[英]create a tar.gz of a directory and clean up the directory except a file?

I would like to know if tar (1.15.1, Linux system) already has something like this before creating a script for it. 我想知道tar(1.15.1,Linux系统)在为它创建脚本之前是否已经有类似的东西。

I would like to create a dir.tar.gz of a given dir/ that contains a specific dir/myfile.gz . 我想创建一个给定dir/dir.tar.gz dir/包含一个特定的dir/myfile.gz I would like the command to do 2 specific things: 我想命令做两件具体的事情:

  1. Preserve dir/myfile.gz 保留dir/myfile.gz
  2. Delete everything else in dir/ after the dir.tar.gz is complete. dir.tar.gz完成后删除dir/所有其他内容。

For example: 例如:

tree -if .
.
./dir
./dir/dir2
./dir/dir2/file3
./dir/file1
./dir/file2
./dir/myfile.gz

2 directories, 4 files

I would like the result of the tar command to be: 我想tar命令的结果是:

tree -if  
.
./dir
./dir/myfile.gz
./dir.tar.gz

1 directory, 2 files

I have read about the --delete and --extract options, but I am not sure how to apply them in one single command. 我已经阅读了--delete--extract选项,但我不确定如何在一个命令中应用它们。 Any ideas? 有任何想法吗?

This should work: 这应该工作:

tar -zcvf dir.tar.gz --exclude="*.gz" ./dir/. && find ./dir/. ! -name "*.gz" -exec rm -rf {} +

Test: 测试:

$ tree -if .
.
./dir
./dir/dir2
./dir/dir2/file3
./dir/file1
./dir/file2
./dir/myfile.gz

2 directories, 4 files

$ tar -zcvf dir.tar.gz --exclude="*.gz" ./dir/. && find ./dir/. ! -name "*.gz" -exec rm -rf {} +
./dir/./
./dir/./file1
./dir/./dir2/
./dir/./dir2/file3
./dir/./file2
rm: cannot remove `.' or `..'

$ tree -if .
.
./dir
./dir/myfile.gz
./dir.tar.gz

1 directory, 2 files

您可能还对tardy感兴趣,这是一个tar后处理器(过滤器),因此您可以在tar存档上操作(即使在运行中)并删除有问题的文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM