Question Commande Shell vers le répertoire tar excluant certains fichiers / dossiers


Existe-t-il une commande / script shell simple qui empêche l'archivage de certains fichiers / dossiers?

J'ai un répertoire qui doit être archivé avec un sous-répertoire qui a un certain nombre de fichiers très volumineux que je n'ai pas besoin de sauvegarder.

Pas tout à fait des solutions:

le tar --exclude=PATTERN La commande correspond au modèle donné et exclut ces fichiers, mais j'ai besoin de fichiers et de dossiers spécifiques à ignorer (chemin de fichier complet), sinon des fichiers valides pourraient être exclus.

Je pourrais aussi utiliser la commande find pour créer une liste de fichiers et exclure ceux que je ne veux pas archiver et passer la liste à tar, mais cela ne fonctionne qu'avec une petite quantité de fichiers. J'ai des dizaines de milliers.

Je commence à penser que la seule solution est de créer un fichier avec une liste de fichiers / dossiers à exclure, puis utiliser rsync avec --exclude-from=file pour copier tous les fichiers dans un répertoire tmp, puis utilisez tar pour archiver ce répertoire.

Quelqu'un peut-il penser à une solution meilleure / plus efficace?

MODIFIER: cmaLa solution fonctionne bien. Le grand gotcha est que le --exclude='./folder'  DOIT être au début de la commande tar. Commande complète (cd en premier, donc la sauvegarde est relative à ce répertoire):

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

586
2018-06-11 22:57


origine


Réponses:


Vous pouvez avoir plusieurs options d'exclusion pour le goudron

$ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

etc va fonctionner. Faire sûr mettre --exclude  avant les éléments source et destination.


727
2018-06-11 23:11



Vous pouvez exclure des répertoires avec --exclude pour le goudron.

Si vous voulez archiver tout sauf /usr vous pouvez utiliser:

tar -zcvf /all.tgz / --exclude=/usr

Dans votre cas peut-être quelque chose comme

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir

116
2018-06-11 23:08



Options possibles pour exclure les fichiers / répertoires de la sauvegarde en utilisant tar:

Exclure les fichiers en utilisant plusieurs modèles

tar -czf backup.tar.gz --exclude=PATTERN1 --exclude=PATTERN2 ... /path/to/backup

Exclure les fichiers à l'aide d'un fichier d'exclusion rempli d'une liste de modèles

tar -czf backup.tar.gz -X /path/to/exclude.txt /path/to/backup

Exclure les fichiers à l'aide de balises en plaçant un fichier de balises dans un répertoire qui doit être ignoré

tar -czf backup.tar.gz --exclude-tag-all=exclude.tag /path/to/backup

47
2017-11-08 00:22



vieille question avec beaucoup de réponses, mais j'ai trouvé qu'aucun n'était assez clair pour moi, alors j'aimerais ajouter mon essai.

si vous avez la structure suivante

/home/ftp/mysite/

avec les fichiers / dossiers suivants

/home/ftp/mysite/file1
/home/ftp/mysite/file2
/home/ftp/mysite/file3
/home/ftp/mysite/folder1
/home/ftp/mysite/folder2
/home/ftp/mysite/folder3

donc, vous voulez faire un fichier tar qui contient tout dans / home / ftp / mysite (pour déplacer le site vers un nouveau serveur), mais file3 est juste indésirable, et tout dans folder3 n'est pas non plus nécessaire, donc nous allons passer ces deux.

nous utilisons le format

tar -czvf <name of tar file> <what to tar> <any excludes>

où c = create, z = zip, et v = verbose (vous pouvez voir les fichiers tels qu'ils sont entrés, utile pour s'assurer qu'aucun des fichiers que vous excluez n'est ajouté). et f = fichier.

donc, ma commande ressemblerait à ceci

cd /home/ftp/
tar -czvf mysite.tar.gz mysite --exclude='file3' --exclude='folder3'

notez que les fichiers / dossiers exclus sont relativement à la racine de votre tar (j'ai essayé le chemin complet ici par rapport à / mais je ne peux pas faire ce travail).

espérons que cela aidera quelqu'un (et moi la prochaine fois que je google)


31
2018-05-08 10:48



Je l'ai vécu, au moins avec le Cygwin version de tar que j'utilise ("CYGWIN_NT-5.1 1.7.17 (0.262 / 5/3) 2012-10-19 14:39 i686 Cygwin" sur une machine Windows XP Édition familiale SP3), l'ordre des options est important.

Alors que cette construction a fonctionné pour moi:

tar cfvz target.tgz --exclude='<dir1>' --exclude='<dir2>' target_dir

celui-là n'a pas travail:

tar cfvz --exclude='<dir1>' --exclude='<dir2>' target.tgz target_dir

Ceci, tout en tar --help révèle ce qui suit:

tar [OPTION...] [FILE]

Donc, la deuxième commande devrait aussi fonctionner, mais apparemment, ça ne semble pas être le cas ...

Meilleurs rgds,


14
2017-12-31 07:08



Vous pouvez utiliser la "notation fourmi" standard pour exclure les répertoires relatifs.
Cela fonctionne pour moi et exclut tous les répertoires .git ou node_module.

tar -cvf myFile.tar --exclude=**/.git/* --exclude=**/node_modules/*  -T /data/txt/myInputFile.txt 2> /data/txt/myTarLogFile.txt

myInputFile.txt Contient:

/ dev2 / java
/ dev2 / javascript


11
2018-05-14 14:10



Je l'ai trouvé ailleurs, donc je ne vais pas prendre le crédit, mais cela a mieux fonctionné que l'une des solutions ci-dessus pour mes problèmes spécifiques à mac (même si cela est fermé):

tar zc --exclude __MACOSX --exclude .DS_Store -f <archive> <source(s)>

10
2018-02-05 21:59



Ce modèle d'exclusion gère le suffixe du nom de fichier comme png ou mp3 ainsi que les noms de répertoires tels que .git et node_modules

tar --exclude={*.png,*.mp3,*.wav,.git,node_modules} -Jcf ${target_tarball}  ${source_dirname}

8
2018-02-12 20:55



Utilisez la commande find en conjonction avec l'option tar append (-r). De cette façon, vous pouvez ajouter des fichiers à un fichier tar existant en une seule étape, au lieu d'une solution à deux passes (créer une liste de fichiers, créer un fichier tar).

find /dir/dir -prune ... -o etc etc.... -exec tar rvf ~/tarfile.tar {} \;

4
2018-06-11 23:03