créer un tar.gz d’un répertoire et nettoyer le répertoire sauf un fichier?

Je voudrais savoir si tar (1.15.1, système Linux) a déjà quelque chose comme ça avant de créer un script pour lui.

Je voudrais créer un dir.tar.gz un dir.tar.gz donné dir/ contenant un dir/myfile.gz spécifique dir/myfile.gz . Je voudrais que la commande fasse 2 choses spécifiques:

  1. Préserver dir/myfile.gz
  2. Supprimez tout le rest dans dir/ après que dir.tar.gz soit terminé.

Par exemple:

 tree -if . . ./dir ./dir/dir2 ./dir/dir2/file3 ./dir/file1 ./dir/file2 ./dir/myfile.gz 2 directories, 4 files 

Je voudrais que le résultat de la commande tar soit:

 tree -if . ./dir ./dir/myfile.gz ./dir.tar.gz 1 directory, 2 files 

J’ai lu sur les options --delete et --extract , mais je ne sais pas comment les appliquer en une seule commande. Des idées?

Cela devrait fonctionner:

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

Tester:

 $ 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 

Vous pouvez également être intéressé par les retards qui sont un post-processeur tar (filtre), vous pouvez donc opérer (même à la volée) sur votre archive tar et supprimer le fichier incriminé.