Tengo muchos archivos que necesito comprimir en un solo directorio. No quiero comprimir todos los archivos en el directorio, pero solo los que coinciden con una determinada consulta.
yo hice
grep abc file-* > out.txt
hacer un archivo con todas las instancias de "abc" en cada archivo. Necesito los archivos ellos mismos. ¿Cómo puedo decirle a bash que comprima solo esos archivos?
grep abc file-* > out.txt
un archivo con todas las instancias de "abc" en cada archivo. Necesito los archivos ellos mismos.zip ZipFile.zip file-*
, que es la forma obvia de hacerlo. Necesitaría un archivo intermedio solo si estuviera utilizando un complejofind
o una concatenación de listas de archivos de diferentes búsquedas.Respuestas:
Muy simple:
Es decir, si su
out.txt
archivo contiene un nombre de archivo por línea. Agregará todos los archivos deout.txt
un archivo llamadoarchive.zip
.La
-@
opción hacezip
leer desde STDIN.Si desea omitir la creación de un
out.txt
archivo temporal , también puede usargrep
la capacidad de imprimir nombres de archivo.-r
habilita la búsqueda recursiva (puede que no sea necesaria en su caso) e-l
imprime solo nombres de archivos:fuente
cat out.txt | while read line ; do xargs zip archive.zip $line ; done
zip archive.zip $(ls common_name*)
-@
sintaxis de la opción funciona bien a partir del 10.16, a pesar de que la página del manual todavía incluye lenguaje sobrenot on MacOS
Alternativas a la respuesta aceptada, desde aquí :
fuente