web-dev-qa-db-fra.com

Comment compresser une liste de fichiers sous Linux

J'ai beaucoup de fichiers que je dois compresser dans un seul répertoire. Je ne veux pas compresser tous les fichiers du répertoire, mais uniquement ceux qui correspondent à une requête donnée.

J'ai fait

grep abc file-* > out.txt 

faire un fichier avec toutes les instances de "abc" dans chaque fichier. J'ai besoin des fichiers eux-mêmes. Comment puis-je dire à bash de ne compresser que ces fichiers?

13
john mangual

Très simple:

Zip archive -@ < out.txt

En d’autres termes, si votre fichier out.txt contient un nom de fichier par ligne. Il ajoutera tous les fichiers de out.txt à une archive appelée archive.Zip.

L'option -@ permet à Zip de lire STDIN.

Si vous souhaitez ignorer la création d'un fichier temporaire out.txt, vous pouvez également utiliser la fonction grep pour imprimer les noms de fichiers. -r permet la recherche récursive (cela peut ne pas être nécessaire dans votre cas) et -l imprime uniquement les noms de fichiers:

grep -rl "abc" file-* | Zip archive -@
26
slhck

Alternatives à la réponse acceptée, de ici :

cat out.txt | Zip -@ zipfile.Zip
cat out.txt | Zip -@ - > zipfile.Zip
zip zipfile.Zip $(cat out.txt) -r
Zip zipfile.Zip -r . [email protected]
0
sancho.s