J'ai de nombreux fichiers à compresser dans un seul répertoire. Je ne veux pas compresser tous les fichiers du répertoire, mais seulement ceux correspondant à une certaine requête.
J'ai fait
grep abc file-* > out.txt
pour créer un fichier avec toutes les instances de "abc" dans chaque fichier. J'ai besoin des fichiers eux-mêmes. Comment dire à bash de compresser uniquement ces fichiers?
grep abc file-* > out.txt
un fichier avec toutes les instances de "abc" dans chaque fichier. J'ai besoin des fichiers eux-mêmes.zip ZipFile.zip file-*
, c'est la façon évidente de le faire. Vous auriez besoin d'un fichier intermédiaire uniquement si vous utilisiez un complexefind
ou une concaténation de listes de fichiers provenant de différentes recherches.Réponses:
Très simple:
Autrement dit, si votre
out.txt
fichier contient un nom de fichier par ligne. Il ajoutera tous les fichiers deout.txt
à une archive appeléearchive.zip
.L'
-@
option faitzip
lire depuis STDIN.Si vous souhaitez ignorer la création d'un
out.txt
fichier temporaire , vous pouvez également utilisergrep
la capacité de pour imprimer les noms de fichiers.-r
active la recherche récursive (peut-être pas nécessaire dans votre cas) et-l
imprime uniquement les noms de fichiers:la source
cat out.txt | while read line ; do xargs zip archive.zip $line ; done
zip archive.zip $(ls common_name*)
-@
syntaxe des options fonctionnenot on MacOS
Alternatives à la réponse acceptée, d' ici :
la source