Comment exclure des fichiers de l'archive TAR à l'aide d'expressions régulières?

10

J'ai une question simple, mais je ne peux pas trouver ou résoudre la réponse. Je veux créer une archive tar, mais je veux en exclure certains fichiers à l'aide d'une expression régulière.

Voici un exemple de fichier à exclure: 68x640X480.jpg

J'ai essayé sans succès:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

Quelqu'un peut-il aider?

Frodik
la source

Réponses:

11

Vous pouvez utiliser des outils supplémentaires comme findet egrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

L'inconvénient de la méthode mentionnée ci-dessus est qu'elle ne fonctionnera pas pour tous les noms de fichiers possibles. Une autre possibilité consiste à utiliser la fonctionnalité d'exclusion intégrée de tar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

Malheureusement, la deuxième méthode ne fonctionne pas avec les expressions régulières, mais uniquement avec les caractères génériques.

Vladimir Blaskov
la source
Merci, c'est ce que je cherchais. Pouvez-vous s'il vous plaît noter quels noms de fichiers ne fonctionneraient pas? par exemple contenant quels caractères?
Frodik
Ne vous inquiétez pas trop de cela - la plupart des noms de fichiers fonctionnent parfaitement avec cette solution. Le problème est que les noms de fichiers UNIX / Linux peuvent inclure à peu près tout, même les caractères de contrôle - de telles combinaisons obscures ne fonctionneront pas avec la première solution.
Vladimir Blaskov
Une bonne lecture concernant les noms de fichiers UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov
0

Vous devriez peut-être essayer cpio

http://cybertiggyr.com/cpio-howto

Il lit à partir de la liste des fichiers et effectue l'archivage. Vous pouvez générer une liste de fichiers en utilisant sed comme indiqué ci-dessous.

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

Vous pouvez ensuite l'utiliser comme entrée pour cpio.

nitines
la source