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?
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 -@
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]